Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
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 HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
La carta Pokémon da 16,5 milioni ...
Robot umanoidi che fanno parkour e backf...
Meta ha brevettato un'IA capace di pubbl...
Sorpasso di TCL a Samsung nel mercato gl...
Speciale monitor in offerta su Amazon: d...
AMD smentisce i ritardi di Instinct MI45...
Meta e NVIDIA, partnership di ferro: mil...
Xiaomi 17 Ultra promosso da DXOMARK ma i...
iPad Mini: nuova generazione in arrivo, ...
Offerta TOP: Xiaomi Redmi Note 15 Pro 5G...
POCO X8 Pro: confermate le specifiche de...
Nothing 'cancella' Apple e annuncia la d...
Ora è ufficiale: anche Steam Deck...
2 tablet 8GB/256GB Full HD e 4G LTE in s...
Paramount non molla Warner Bros: ha 7 gi...
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: 10:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v