Socket.io-client: Transport standardmäßig auf Polling statt Websocket?

Erstellt am 11. Sept. 2015  ·  9Kommentare  ·  Quelle: socketio/socket.io-client

Zeile 1613 von socket.io.js lautet:
this.transports = opts.transports || ['Abfrage', 'Websocket'];

Warum ist die Reihenfolge nicht ['websocket', 'polling']?

Auf der Clientseite mache ich:
var-Socket = io.connect(url);

Auf der Serverseite habe ich dann Folgendes getan:
io.on('Verbindung', Funktion(Buchse){
Konsole.log (Socket);
});

Der Handshake-Teil sieht so aus:

handshake: 
   { headers: 
      { 'user-agent': 'node-XMLHttpRequest',
        accept: '*/*',
        host: 'localhost:8081',
        connection: 'close' },
     time: 'Fri Sep 11 2015 16:04:39 GMT-0400 (EDT)',
     address: '::ffff:127.0.0.1',
     xdomain: false,
     secure: false,
     issued: 1442001879771,
     url: '/socket.io/?EIO=3&transport=polling&t=1442001879749-0&b64=1',
     query: { EIO: '3', transport: 'polling', t: '1442001879749-0', b64: '1' } }

Bedeutet dies, dass Polling anstelle von Websocket verwendet wird?

Ich habe versucht, den Transport explizit auf 'websocket' zu setzen, und der Handshake-Teil wurde wie folgt geändert, was korrekt zu sein scheint:
var socket = io.connect(url,{transports:['websocket']});

handshake: 
   { headers: 
      { connection: 'Upgrade',
        upgrade: 'websocket',
        host: 'localhost:8081',
        origin: 'localhost:8081',
        'sec-websocket-version': '13',
        'sec-websocket-key': 'MTMtMTQ0MjAwMTUxNDcyNA==' },
     time: 'Fri Sep 11 2015 15:58:34 GMT-0400 (EDT)',
     address: '::ffff:127.0.0.1',
     xdomain: true,
     secure: false,
     issued: 1442001514739,
     url: '/socket.io/?EIO=3&transport=websocket',
     query: { EIO: '3', transport: 'websocket' } }

Hilfreichster Kommentar

+1
Ich bevorzuge die Idee von "Downgrade" anstelle von "Upgrade". Derzeit unterstützen die meisten Browser Websocket gut. Die anfängliche Verbindung mit Websocket verbessert die Leistung und spart Ressourcen.

Alle 9 Kommentare

+1
Ich bevorzuge die Idee von "Downgrade" anstelle von "Upgrade". Derzeit unterstützen die meisten Browser Websocket gut. Die anfängliche Verbindung mit Websocket verbessert die Leistung und spart Ressourcen.

Der Grund für upgrade ist der folgende.

Socket.IO geht nie davon aus, dass WebSocket einfach funktioniert, denn in der Praxis besteht eine gute Chance, dass dies nicht der Fall ist. Stattdessen stellt es sofort eine Verbindung mit XHR oder JSONP her und versucht dann, die Verbindung auf WebSocket zu aktualisieren. Im Vergleich zur Fallback-Methode, die auf Timeouts basiert, bedeutet dies, dass keiner Ihrer Benutzer eine verschlechterte Erfahrung hat.

http://socket.io/blog/introducing-socket-io-1-0/

@nkzawa
Ich verstehe, warum der Upgrade-Ansatz bevorzugt wird, und es ist eine sehr nette Funktion.
Aber es wird nicht immer benötigt: In kontrollierten Unternehmensumgebungen ist der Downgrade-Ansatz sinnvoller, und ich würde sagen, dass das Erzwingen von Web-Socket als einzig erlaubter Transport der beste Weg ist, um die Leistung zu optimieren.

Ich habe versucht, den Transport zum Web-Socket sowohl auf dem Client als auch auf dem Server zu erzwingen, indem ich diese Option übergeben habe:
{ transports: ["websocket"] }

Dies scheint zu funktionieren und ich habe nur eine Web-Socket-Verbindung zum Server, aber ich habe festgestellt, dass auch ein Polling durchgeführt wird, das offensichtlich bei jedem Versuch fehlschlägt:
Request URL:http://localhost:4000/socket.io/?EIO=3&transport=polling&t=L8RaD0p
{ code: 0, message: "Transport unknown" }

Gibt es derzeit eine praktikable Lösung, um diesen Upgrade-Ansatz in ein Downgrade zu ändern?

Egal, es war mein Code, der diese zusätzliche Abfrage von einer anderen Klasse durchgeführt hat, in der ich auch socket.io verwendet habe. Die Verwendung von Opts, die die Transporte auf Websocket beschränken, wenn ich eine Verbindung herstelle, macht also, was ich wollte.

@sirudog
Sie können Folgendes versuchen: { transports: ['websocket', 'polling'] }

Danke @poppowerlb2 (kein Traffic mehr wie er in meinem Netzwerk-Tab). Auch wenn mein Browser aktuell ist, sehe ich, dass socket-io-client Polling bevorzugt.

Schließt dieser Upgrade-Ansatz nicht einige Server aus? Ich versuche, socket.io mit einem Node-Red-Server zu verwenden und kann noch keine Verbindung herstellen. Natürlich funktioniert es gut mit normalen Websockets.

Ich denke auch, dass es vorzuziehen ist, dass socket.io Websockets ausprobiert, auch wenn das Polling nicht funktioniert.

+1
Ich bevorzuge die Idee von "Downgrade" anstelle von "Upgrade". Derzeit unterstützen die meisten Browser Websocket gut. Die anfängliche Verbindung mit Websocket verbessert die Leistung und spart Ressourcen.

`
const client = io('https://io.yourhost.com', { // WARNUNG: In diesem Fall gibt es keinen Fallback auf lange Abfragen: [ 'websocket' ] // or [ 'websocket', ' Polling' ], was dasselbe ist})

https://socket.io/docs/using-multiple-nodes/
`

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen