socket.io可以跨域使用吗?

我有一个socket.io实现,我试图让它跨域的工作,但它似乎不能。 这是我确切的用例:

  • 我有一个运行socket.io的node.js服务器。
  • 我有一个JS / HTML5游戏,我希望能够从任何地方主持,其中有客户端socket.io代码,并尝试连接到服务器。
  • 我有通过SpiderMonkey在移动设备上运行相同的JS代码(这是我需要从任何域运行这个主要原因之一)。

我发现我根本无法连接到套接字,除非我从我的node.js服务器的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文件进行连接,这种方法将不起作用。 我将尝试跨同一networking上的不同机器…

是的,Socket.IO跨域工作得很好。 实际的Socket.IO库可以/应该从托pipe它的服务器加载。

额外的信息:如果我试图通过使用file:///从磁盘打开的HTML文件进行连接,这种方法将不起作用。

不要这样做。 从磁盘加载文件或通过HTTP加载文件时,遇到各种奇怪的问题。

无法加载资源:找不到具有指定主机名的服务器。

这通常意味着,无论您尝试连接的主机名是不可parsing的,都表示出现了DNS问题或您input了主机名。 在任何情况下,您的代码示例都不会显示问题可能出现的相关部分。 使用浏览器的开发人员工具首先确定一切正确加载。 然后,validation您正在尝试连接的地址。