Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-07-2006, 13:11   #1
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
[JAVA]Gioco multiplayer

Come potrei fare un gioco muliplayer?
Vorrei fare che uno potrebbe fare da server e rimanere in ascolto di vari client(numero prestabilito), e ovviamente che quando un client si connette riceve dati dal server e invia i propri.

Io ho pensato ad un thread che resta in ascolto della connessione dei client(temporizzato in modo da non bruciare troppa cpu, non so tipo 200ms) e che quando riceve la richiesta di connessione da un client avvia un altro thread adibito alla comunicazione con quel client.

Secondo voi andrebbe bene così??
Il fatto è che avrei molto thread poi, ed in più i thread per gestire i client(ognuno il suo) non devono essere temporizzati o sbagli? Altrimenti avrei un lag assurdo.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 13:36   #2
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Mmm sto pensando, il thread che rimane in ascolto dei client può anche essere non temporizzato credo visto che tanto rimane bloccato finche un client non si connette.

Stavo poi anche pensando ad una cosa, se il ping di norma tra due linee adsl è di 90ms come cavolo faccio a spedire la posizione di un oggetto e rielaborarla dall'altra parte? Cioè se spedisco ogni 90ms circa, avrò un frame rate bassissimo!!!
Mettiamo un caso semplice dove c'è un server ed un solo client, ognuno può muovere una palla ede entrambi vedono sullo schermo la propria palla e quella dell'altro.
Si devono ovviamente spedire la posizione delle singole palle, ma andranno a scattissimi se spedisco ogni 90ms!!! Sono solo 11frame per secondo, assurdo ci deve essere un'altro modo!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 13:54   #3
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Mi sono dimenticato di dire che prima parlavo del protocollo TCP
Sto guardando il protoccollo UDP e forse credo che potrebbe fare al caso mio...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 13:56   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da MEMon
Mmm sto pensando, il thread che rimane in ascolto dei client può anche essere non temporizzato credo visto che tanto rimane bloccato finche un client non si connette.
Esatto ... rimane bloccato sulla accept().

Quote:
Originariamente inviato da MEMon
Stavo poi anche pensando ad una cosa, se il ping di norma tra due linee adsl è di 90ms come cavolo faccio a spedire la posizione di un oggetto e rielaborarla dall'altra parte? Cioè se spedisco ogni 90ms circa, avrò un frame rate bassissimo!!!
Innanzitutto in questi casi in cui si ha bisogno di una certa velocità, credo (ma non ne sono sicuro) che sarebbe meglio usare UDP invece che TCP.
Comunque non confondere la latenza (90ms) con la velocità! E comunque chi vuole veramente giocare "on-line" è bene che si prenda una ADSL settata in modalità "fast".

Tieni presente che dal momento in cui invii un pacchetto di dati, esso arriva al destinatario con un certo ritardo (questo è ovvio e normale). Quello che ti deve importare non è tanto questa latenza ma la velocità con cui puoi spedire pacchetti! Non devi per forza spedire pacchetti ogni 90ms! Se tu spedisci pacchetti di dati ogni 20ms (50 volte al secondo) il destinatario li riceverà più o meno ogni 20 ms ma semplicemente "ritardati" di un tot di tempo, che è comunque molto basso! (90ms sono comunque meno di una frazione di secondo!).


P.S. stavo osservando il tuo avatar .... divertente
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 13-07-2006 alle 13:59.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 14:07   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ah ok capito grazie!
Te hai mai realizzato qualcosa del genere??

Stavo proprio guardando se non era il caso di usare l'UDP(mai fatto prima) se butto giù un po' di codice hai tempo di seguirmi un attimino?

Comunque mi chiedevo, se io ho un thread per ogni client dove spedisco i dati(parlo ancora del TCP) in pratica dovrei fare una cosa del genere
Codice:
ObjectOutputStream.writeObject(pos_giocatore_server);
ObjectInputStream.readObject(pos_giocatore_client);
ObjectOutputStream.writeObject(altri dati);
In pratica ogni volta si blocca finchè non riceve i dati dal client giusto? Questo fa perdere un casino di tempo o sbaglio?

ps.grazie x l'avatar(fatto con le mie mainine il giorno dopo la vittoriaaaaaaa)
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 14:20   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da MEMon
Te hai mai realizzato qualcosa del genere??
No .... magari.

Quote:
Originariamente inviato da MEMon
Stavo proprio guardando se non era il caso di usare l'UDP(mai fatto prima) se butto giù un po' di codice hai tempo di seguirmi un attimino?
Più o meno (più il meno che il più ), perché non sono ferratissimo in materia di networking e socket.

Quote:
Originariamente inviato da MEMon
Comunque mi chiedevo, se io ho un thread per ogni client dove spedisco i dati(parlo ancora del TCP) in pratica dovrei fare una cosa del genere
Codice:
ObjectOutputStream.writeObject(pos_giocatore_server);
ObjectInputStream.readObject(pos_giocatore_client);
ObjectOutputStream.writeObject(altri dati);
In pratica ogni volta si blocca finchè non riceve i dati dal client giusto? Questo fa perdere un casino di tempo o sbaglio?
Innanzitutto sarebbe, credo, meglio avere 2 thread per una singola comunicazione, uno per la scrittura e l'altro per la lettura.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 14:32   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Uhm ma i thread non cominciano a diventare un po' troppi?
Facciamo due conti, essendo un'applicazione grafica, quindi elbarazione e rendering:
SERVER
1 thread per elaborare la posizione
1 thread per disegnare quel che c'è da disegnare
1 thread per rimanere in attesa dei client
n thread dove n?numero client
2 thread per client 1 di lettura uno di scrittura
TOTALE=3+2*n thread

CLIENT
1 thread per elaborare la posizione
1 thread per disegnare quel che c'è da disegnare
1 thread per spedire i dati
1 thread per leggerli
TOTALE 4 thread

Non sono un po' tantini?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 14:49   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da MEMon
Non sono un po' tantini?
Dal lato client, avere 4 thread non è certamente un problema. Dal lato server, non credo nemmeno e comunque dipende da quanto vale quel "n".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 14:53   #9
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Intanto butto giù un po' di codice per cercare di fare una connessione multithread sempre TCP per ora.
Più tardi spero di postare il risultato
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 17:05   #10
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
vai, ti seguo impazientemente, speriamo che ci riesca, e se hai problemi postali

A prop, mi sono "scopiazzato" il tuo avatar
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 17:52   #11
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Fai pure per l'avatar no problem

Sto scrivendo intanto fra poco dovrei postare le prime cose!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 18:23   #12
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Problemino, che so come risolvere ma penso ci sia un metodo meno macchinoso del mio!

Allora ho un thread(A) il quale resta in ascolto delle connessioni dei client, quando un client si connette genera un thread(B) il quale svolge tutte le attività inerenti allo scambio di dati tra server e client.
Il problema è questo:come faccio dal thread(B) a far entrare ed uscire i dati che devo scambiare?

Un po' di codice:
Codice:
...metodo run del thread(A)
	public void run(){
		try{
			System.out.println("Server Avviato...");
			while(true){
				cs=ss.accept(); // crea il socket del client per comunicarci
				nClient++;
				ServerThread st=new ServerThread(cs,in,out); //E' il thread che si occupa dello scambio dati
				st.start();
				System.out.println(nClient);
			}
		}
		catch(Exception e){
			System.err.println(e);
		}
	}
Come potete vedere creo i thread quando un client si connette.

Codice:
...metodo run thread(B)
	public void run(){
		Thread leggi=new Thread("Lettura"){
			public void run(){
				while(true){
					try{
						ObjectInputStream is=new ObjectInputStream(cs.getInputStream());
						in=(String)is.readObject();
						System.out.println(in);
						sleep(1);
					}
					catch(Exception e){
						System.err.println(e);
					}
				}
			}
		};
		Thread scrivi=new Thread("Scrittura"){
			public void run(){
				while(true){
					try{
						ObjectOutputStream os=new ObjectOutputStream(cs.getOutputStream());
						os.writeObject(out);
						sleep(1);
					}
					catch(Exception e){
						System.err.println(e);
					}
				}
			}
		};
		leggi.start();
		scrivi.start();
	}
Allora in pratica il thread(B) istanzia altri due thread uno per la lettura ed uno per la scrittua di una stringa(in e out sono le stringhe)

Per usare tutto questo basta creare un oggetto di tipo Server ed automaticamente si creerà un thread che resta in ascolto delle connessioni, ma poi come passo i valori da scrivere e come tiro fuori ciò che ho letto???
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 18:25   #13
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Io ho pensato che potrei inserire tutti i thread che creo quando si connetto i client in un array invece di perdere i riferimenti, così posso usarli per scambiare i dati. Basterebbe infatti interrogare ogni thread uno ad uno con un ciclo for.
Mi sembra però un po' macchinoso.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 18:54   #14
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ho praticamente fatto una chat multiutente, cioè che ciò che scrivi lo vedono tutti, un po' come irc.
Il fatto è che non funziona cioè, quando scrive il server scrive a tutti i client, ma quando scrivono i client riceve solo il server...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2006, 19:00   #15
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Allora, ho finito la chat multiutente se posto il codice non mi prendete in giro vero?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2006, 09:19   #16
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ho finito la mia piccola prova direi, si tratta di una connessione multiutente dove ogni utente può muovere una palla e scrivere in una chat, e ovviamente vedere la posizione delle altre palle.
In locale funziona benissimo ora vorrei provarlo "veramente" chi si offre?

Mi sono iscritto qui http://www.no-ip.com/ come faccio per poter reindirizzare il mio ip sulla rete?
Cioè vorrei che digitando il mio ip, non mi collego direttamente alla mia macchina ma passo da un loro server.
Ma magari apri un 3d apposta.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2006, 17:48   #17
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Anche se non vi frega dopo diverse prove con il TCP ho dedotto che forse non è quello che fa per me.
Sono riuscito a fare quello che volevo ma non mi piace molto il metodo, ora provo con l'UDP!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2006, 01:10   #18
il_luridone
Member
 
L'Avatar di il_luridone
 
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
No, il TCP non fa per te, non fosse altro per l'algoritmo di Neagle che ritarda la spedizione dei segmenti tcp finchè non hanno una certa dimensione, per evitare frammentazione.

L'UDP in effetti era la scelta giusta fin da subito, ovvero un protocollo veloce che non dia garanzie di ricezione (non ti interessa che un pacchetto perso venga rispedito, essendo "real time" un pacchetto rispedito è già obsoleto e quindi inutile).

Magari una panoramica sui protocolli prima di mettersi a scrivere il codice aiuta ed evita fatiche inutili

Wikipedia di solito su queste cose è abbastanza buona come punto di partenza.
__________________
And the salad is frightful!
I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out.
il_luridone è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
La famiglia Xiaomi 17 sta per registrare...
Nuove auto elettriche che vedremo sul me...
E-bike illegali, a Verona il più ...
Quali sono i giochi più venduti su Steam...
HONOR sta per lanciare un nuovo smartpho...
Jared Isaacman sarà alla guida de...
Il Tesla Cybertruck non arriverà ...
Xiaomi Watch 5 è ufficiale: architettura...
CD Projekt vende GOG: il co-fondatore Mi...
Il meglio di Amazon in 26 prodotti, aggi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v
Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.