我试图让flashsocket与socket.io一起工作,但它没有,总是在xhr轮询回退中进行。
如果有人能帮忙的话,我看不出我做错了什么。
在服务器端:
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是否启用了flash。
我还检查了端口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`
谢谢你的帮助
最佳答案
事实上,它是有效的!
多亏了XHR,你让我进行了更多的分析和测试,这样我就能自己找到答案。
它起作用,但与预期不同:
在浏览器上启用WebSocket时,不能改用FlashSocket。
因此,即使您使用:transports: ['flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']
设置服务器,您的google chrome也永远不会使用flashsocket,因为它启用了websocket,并返回到xhr轮询。
但是没有启用websocket的internet explorer将使用flashsocket。
我不需要在没有websocket的情况下设置socket.io,所以这种行为对我有效。
此外,我认为这种行为很好,因为它可以防止在不需要.swf文件时加载繁重的文件。
杰罗姆。