Kit*_*Kit 22 javascript websocket node.js socket.io
我有websockets和socket.io的问题.当我尝试使用socket.io连接到我的节点服务器时,它最初使用websockets进行连接,但之后不久将恢复为jsonp-polling.
这是我连接时节点服务器的输出:
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
Run Code Online (Sandbox Code Playgroud)
这种情况发生在Chrome和Safari中.我已经更新到最新的socket.io版本0.6.17并且正在运行节点0.4.7.
我已经尝试删除我在github和SO上建议的cookie和缓存,但问题仍然存在.此外,当我尝试强制使用websockets时,它永远不会与会话ID完全连接.
有没有人有任何想法?
Shr*_*low 13
目前在所有浏览器中默认不支持Websocket API(据我所知)它应该在chrome上工作但尝试在chrome或firefox上测试它(在编辑默认设置之后)并查看是否仍然恢复到XHRPolling.
我在不同的IP上运行它,因为我需要在端口80上运行节点,这会导致我的Web服务器与Apache发生冲突.websockets/flashsockets不能跨域使用吗?
现在可能有两种不同的原因来自这里
Web/Flash套接字不会让你连接到node.js客户端,除非你指定一个像81这样的不同端口,或者你特意指定apache来代理对Node的传入请求.一个简单的解决方案是编写基于Node.js的HTTP服务器,只是从Apache中继数据(并设置Apache在不同的端口运行,然后80)
此链接告诉如何执行此操作...在此过程中,您可以使Node.js执行类似检查请求是否来自websocket/httpbrowser,如果这是一个http浏览器将请求转发给Apache,如果不是,即如果来自web /闪存套接字然后相应地处理插座.或者对问题发表评论.指定APACHE代理Node.js.
Flashsockets要求您在端口843上提供跨域策略文件,您确定要提供跨域文件吗?(我认为socket.io具有内置功能,但仍然很好检查.)
正如socket.io主网站上所说的那样
为了在每个浏览器上提供实时连接,Socket.IO在运行时选择功能最强大的传输,而不会影响API.
很明显,如果禁用websockets并且Adobe Flash Socket无法连接,它将恢复为AJAX Long Polling(这可能是由于策略文件不可用).
下面是跨域文件的示例代码,您可以在代码中包含这些代码,看看是否使您的服务器使用websockets运行.
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4132 次 |
| 最近记录: |