socketio上的flashsocket和nodejs无法正常工作

时间:2012-04-06 23:49:44

标签: flash node.js socket.io

我正在尝试让flashsocket与socket.io一起使用,但它没有,总是进入xhr-polling fallback。

如果有人可以提供帮助,我看不出我做错了什么。

在服务器端

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

之后我检查了我的浏览器chrome已启用闪存。 我还检查了端口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`

谢谢你的帮助

1 个答案:

答案 0 :(得分:6)

事实上,它有效!

感谢XHR,你引导我进行更多的分析和测试,以便我自己找到。

它有效,但与预期不同: 在浏览器上启用websocket时,不能使用flashsocket。

因此,即使您使用:transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']设置服务器,您的Google Chrome也不会使用flashsocket,因为它启用了websocket并且它会回退到xhr-polling。 但是没有启用websocket的Internet Explorer将使用flashsocket。

我没有必要在没有websocket的情况下设置socket.io,所以这种行为对我有用。

此外,我认为这种行为很好,因为它可以防止在您不需要时加载重的.swf文件。

杰罗姆。