2015-12-27 33 views
12

Ho un gioco su cui sto lavorando e ho sentito che UDP è superiore per i giochi in tempo reale. So che socket.io usa TCP e si chiedeva se ci fosse un modo per passare a UDP. Ho provato a cercarlo, ma ho trovato solo post del 2012 che dicevano che UDP è solo sperimentale nei browser.È possibile utilizzare UDP con socket.io?

risposta

11

No, non è possibile.

socket.io utilizza il trasporto webSocket. webSocket è una connessione TCP, non una connessione UDP. Quindi socket.io non usa UDP - usa TCP.

Come meglio noto, non esiste un supporto UDP standard nei browser accessibile dalla normale pagina HTML Javascript.

Altri riferimenti sul tema:

Why Can't I Send UDP Packets From a Browser

Reading from udp port in browser

Chrome Supports TCP and UDP Sockets

Write a chrome extension to support UDP in browser

How to send a UDP Packet with Web RTC - Javascript?

How to talk to UDP sockets with HTML5?

Reading from udp port in browser

UDP può essere un trasporto per alcune circostanze in cui si desidera che il pacchetto da consegnare al più presto possibile, ma se non può essere consegnato immediatamente, poi basta farlo cadere. Questo è a volte utile nei videogiochi o anche nei video streaming in cui il prossimo pacchetto conterrà solo il prossimo aggiornamento, quindi se il precedente non è passato, allora non è un grosso problema e preferiresti che il TCP non tenti di ritrasmettere il pacchetto perso. Ma i browser non supportano l'utilizzo del protocollo UDP dalla pagina web Javascript.

+0

Perché un altro downvote? Downvoters, per favore spiega. Se hai una carne legittima, correggerò la mia risposta. Socket.io in un browser NON funziona su UDP. Questo semplicemente non esiste perché il browser non supporta un trasporto UDP di alcun tipo. Se fai downvoting perché sei stato ingannato dalla risposta di Ramazan, allora leggi i commenti qui sotto che rispondono in quanto la risposta è molto fuorviante e non offre ciò che questa domanda sta ponendo. – jfriend00

3

Sebbene la domanda abbia già una risposta, desidero sottolineare che esistono modi per implementare socket.io con UDP. Ad esempio, dgram fa esattamente quello che stai cercando.

This is un tutorial per socket.io + UDP con dgram.

UPDATE:

Alexandre Lacheze ha sviluppato un node.js package che porta UDP al browser. Supporta anche socket.io. Quindi la risposta è in qualche modo obsoleta ora.

+1

Penso che tu possa essere confuso su ciò che è descritto qui. Il tuo primo riferimento viene eseguito interamente su node.js e non viene eseguito nel browser. Questo è solo un codice di esempio per il supporto UDP bulit in node.js. Quindi, ciò non ha nulla a che fare con UDP nel browser. Il secondo riferimento è simulare un'interfaccia simile a UDP, ma eseguirla su webSocket o su un trasporto socket.io (che sono entrambe connessioni TCP). Quindi questa è un'interfaccia UDP simulata che funziona in un browser, ma il trasporto effettivo è TCP, non UDP.Quindi, nessuno di questi esegue un vero protocollo UDP nel browser. – jfriend00

+1

Il secondo esempio, se utilizzato con un proxy basato su server che converte questo UDP simulato che gira su socket.io in UDP effettivo può essere utilizzato per comunicare con un servizio UDP da un browser, ma non si deve essere ingannati nel pensare che questo sia usare UDP in un browser per i motivi che in genere si vorrebbe usare UDP per i giochi a bassa lag reattivi, in quanto non lo è. È intelligente e può avere alcuni usi interessanti, ma non è quello che è stato chiesto a questa domanda, ovvero come eseguire socket.io su UDP. Cordiali saluti, il nome dell'interfaccia nella seconda opzione è 'SimUDP', UDP simulato. – jfriend00

+0

Quindi, per riassumere. Nulla nella tua risposta mostra un'implementazione di socket.io che gira su UDP in modo tale che parte della tua risposta sia completamente non supportata. E la tua affermazione che il pacchetto di Alexandre Lacheze porta UDP al browser è anch'essa sbagliata. Porta un'interfaccia simil-UDP simulata che è effettivamente in esecuzione su TCP per il browser. – jfriend00