2

flashsocket を socket.io で動作させようとしていますが、そうではなく、常に xhr-polling フォールバックになります。

誰かが助けてくれれば、私が間違っていることはわかりません。

サーバー側:

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

クライアント側:

...
<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);
                });
            });

その後、ブラウザのクロムでフラッシュが有効になっていることを確認しました。また、ポート 843 と 10843 がリッスンして応答していることも確認しました。

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

サーバーログでは、次のもののみを取得します。

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`

助けてくれてありがとう

4

1 に答える 1

6

実際、それはうまくいきます!

XHR のおかげで、自分で見つけられるように、より多くの分析とテストを行うことができました。

動作しますが、期待どおりに異なります。ブラウザで websocket が有効になっている場合、代わりに flashsocket を使用することはできません。

したがって、サーバーを : でセットアップしても、transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']websocket が有効になっており、xhr-polling にフォールバックするため、Google Chrome は flashsocket を使用しません。ただし、websocket が有効になっていない Internet Explorer は、flashsocket を使用します。

また、websocket なしで socket.io をセットアップする必要がないため、この動作はうまくいきます。

さらに、重い .swf ファイルを必要としないときにロードするのを防ぐため、この動作は素晴らしいと思います。

ジェローム。

于 2012-04-12T16:54:38.063 に答える