2012-04-06 5 views
2

Ich versuche Flashsocket mit socket.io arbeiten, aber es geht nicht, immer in xhr-polling Fallback gehen.flashsocket on socketio und nodejs funktioniert nicht

Ich sehe nicht, was ich falsch mache, wenn jemand helfen kann.

Auf Server-Seite:

var app = express.createServer(), 
io = require('socket.io').listen(app, { 
    flashPolicyServer: true, 
    transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'] 
}); 
app.listen(80); 

Auf Client-Seite:

... 
<script src="/socket.io/socket.io.js"></script> 
... 
      socket = io.connect(); 

      socket.on('connect', function(evt) { 
       console.log(socket.socket.transport.name); 

       onOpen(timeDifference(new Date(), earlierDate), socket.socket.transport.name); 
       earlierDate = new Date(); 
       socket.on('disconnect', function(evt) { 
        onClose(evt); 
       }); 
       socket.on('echo', function(msg) { 
        onEcho(msg); 
       }); 
       socket.on('error', function(evt) { 
        onError(evt); 
       }); 
      }); 

Danach überprüfte ich, dass mein Browser Chrome hat Blitz aktiviert. Ich überprüfte auch, dass Port 843 und 10843 hören und reagieren:

<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="*"/> 
</cross-domain-policy> 

Auf dem Server-Log, nur bekommen:

debug - served static content /socket.io.js 
debug - client authorized 
info - handshake authorized 14328044138726156 
debug - setting request GET /socket.io/1/xhr-polling/14328044138726156?t=1333755740295 
debug - setting poll timeout 
debug - client authorized for 
debug - clearing poll timeout 
debug - xhr-polling writing 1:: 
debug - set close timeout for client 14328044138726156 
debug - setting request GET /socket.io/1/xhr-polling/14328044138726156?t=1333755740299 
debug - setting poll timeout 
debug - clearing poll timeout 
debug - xhr-polling writing 5:::{"name":"echo","args":["transport type : xhr-polling; and socket.id : 14328044138726156"]} 
debug - set close timeout for client 14328044138726156 
debug - discarding transport 
debug - cleared close timeout for client 14328044138726156 
debug - setting request GET /socket.io/1/xhr-polling/14328044138726156?t=1333755740303 
debug - setting poll timeout 
debug - discarding transport 
debug - cleared close timeout for client 14328044138726156 
debug - clearing poll timeout 
debug - xhr-polling writing 8:: 
debug - set close timeout for client 14328044138726156` 

Dank für Sie

+0

Haben Sie überprüft, dass der Client die SWF-Datei anfordert und ordnungsgemäß empfängt? –

+0

danke für dich Frage: ja ich habe überprüft: aber der Client fordert diese Datei nicht einmal an. Ich habe auch überprüft, dass der .swf zugegriffen werden kann: es ist. – jerome

+0

um klarer zu sein Ich habe überprüft: http: //localhost/socket.io/WebSocketMain.swf: Ich habe auf dem Bildschirm eine nette "Willkommen bei socket.io." – jerome

Antwort

6

In der Tat helfen, es funktioniert!

Dank XHR, Sie führen mich zu mehr analysieren und testen, so dass ich allein gefunden werden konnte.

Es funktioniert, aber anders als erwartet: Wenn Websocket in einem Browser aktiviert ist, können Sie Flashsocket stattdessen nicht verwenden.

Also selbst wenn Sie den Server einrichten mit: transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'] Ihr Google Chrome wird nie flashsocket verwenden, weil es Websocket aktiviert hat und es fällt zurück auf xhr-polling. Aber Internet Explorer, der websocket nicht aktiviert hat, wird flashsocket verwenden.

Und ich habe keine Notwendigkeit, socket.io ohne Websocket einzurichten, so dass dieses Verhalten für mich funktioniert.

Darüber hinaus denke ich, dieses Verhalten ist nett, weil es verhindert, schwere swf-Dateien zu laden, wenn Sie sie nicht benötigen.

Hieronymus.