【发布时间】:2014-09-12 01:29:33
【问题描述】:
我有一个 socket.io 实现,我试图让它跨域工作,但它似乎不能。这是我的确切用例:
- 我有一个运行 socket.io 的 node.js 服务器。
- 我有一个 JS / HTML5 游戏,我希望能够从任何地方托管它,它具有客户端 socket.io 代码并尝试连接到服务器。
- 我通过 SpiderMonkey 在移动设备上运行相同的 JS 代码(这是我需要从任何域运行它的主要原因之一)。
我发现我根本无法连接到套接字,除非我将 JS 代码从我的 node.js 服务器提供给浏览器。例如,如果我只是从浏览器中打开磁盘上的 HTML 文件,它将无法正常工作。
服务器代码:
io.on( "connection", function( socket )
{
this.socket = socket;
this.socket.on( "echo", function( str ){ this.socket.emit( "message", str ); }.bind( this ) );
}.bind( this ) );
客户端代码:
this.socket = io.connect( ip );
this.socket.on("message", function( str ) { console.log( str ); } );
我什至无法连接,我打印出它正在尝试连接,但它从未成功,然后开始抛出 ping 错误。那么,这甚至可能吗?还是我必须通过长轮询或其他方式来做到这一点?
错误:
[Error] Failed to load resource: A server with the specified hostname could not be found. (socket.io, line 0)
额外信息: 如果我尝试从使用 file:/// 从磁盘打开的 HTML 文件进行连接,这将特别不起作用。我将尝试在同一网络上的不同机器上...
【问题讨论】:
-
听起来
ip无效。它设置为什么?开发工具网络选项卡说请求发生了什么? -
尝试访问你的URL,直接在
browser,看看是不是connects。如果确实如此,那么这可能是一些握手问题...... -
IP 为 localhost:13375。如果我创建一个 index.html,我就可以从我的浏览器连接到它。
-
如果你的 node.js 服务器可以监听传入的连接,为什么它不能同时为客户端提供 socket.io.js 脚本?
-
因为我正在通过 Spidermonkey 在移动设备上运行应用程序,所以据我所知,唯一的方法是通过网络视图来实现。
标签: javascript html node.js sockets socket.io