Javascript 铬及;Safari恢复到xhr轮询,而不是使用socket.io的WebSocket
我对WebSocket和socket.io有问题。当我尝试使用socket.io连接到我的节点服务器时,它最初使用WebSocket进行连接,但不久之后恢复到jsonp轮询 这是连接时节点服务器的输出:Javascript 铬及;Safari恢复到xhr轮询,而不是使用socket.io的WebSocket,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,我对WebSocket和socket.io有问题。当我尝试使用socket.io连接到我的节点服务器时,它最初使用WebSocket进行连接,但不久之后恢复到jsonp轮询 这是连接时节点服务器的输出: 8 Jun 07:01:15 - Initializing client with transport "websocket" 8 Jun 07:01:19 - Initializing client with transport "jsonp-polling" 8 Jun 07:01:19 -
8 Jun 07:01:15 - Initializing client with transport "websocket"
8 Jun 07:01:19 - Initializing client with transport "jsonp-polling"
8 Jun 07:01:19 - Client 16630339180119336 connected
这发生在Chrome&Safari中。
我已经更新到最新的socket.io版本0.6.17,并且正在运行node 0.4.7
我已经尝试按照github上的建议删除我的cookie和缓存,但问题仍然存在。此外,当我试图强制WebSocket时,它从未与会话ID完全连接
有人有什么想法吗?目前所有浏览器默认都不支持Websocket API(据我所知),它应该可以在chromium上运行,不过尝试在chromium或firefox上测试一下(编辑默认设置后),看看是否仍然恢复为Xhrpoll
我在另一个IP上运行它,因为我需要在端口80上运行节点,这会导致我的web服务器与Apache发生冲突。WebSocket/FlashSocket不能跨域使用吗 现在可能有两种不同的原因导致这个错误
- 网袋
- Adobe®Flash®套接字
- AJAX长轮询
- AJAX多部分流
- 永远的Iframe
- JSONP轮询
var net = require("net");
// Node.js
var Policy = net.createServer(function(socket)
{
socket.setEncoding('utf8');
socket.on('connect',function(){
console.log("Policy Request");
socket.end("<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" secure=\"false\"/></cross-domain-policy>");
});
});
Policy.listen(843);
var net=require(“net”);
//Node.js
var Policy=net.createServer(函数(套接字)
{
socket.setEncoding('utf8');
socket.on('connect',function(){
console.log(“策略请求”);
插座。结束(“”);
});
});
政策。倾听(843);
由于它升级到jsonp,这意味着您必须以跨域方式使用socket.io。尝试在同一个域上运行websocket服务器我在不同的IP上运行它,因为我需要在端口80上运行节点,这会导致我的web服务器与Apache发生冲突。WebSocket/FlashSocket不能跨域使用吗?WebSocket和FlashSocket可以跨域工作,您可以在socket.io src中看到,在xdomainCheck
函数中,两者都返回一个总括true
,如果涉及代理,则可能与代理相关,而不是与客户端相关。Apache是否充当此socket.io服务器的代理?最后一条评论可能就是原因。如果您的节点运行在Apache或Nginx等代理之后,则无法运行WebSocket(除非您专门为TCP代理对其进行了修补)。