我有一个socket.io实现,我试图让它跨域工作,但它似乎不能。这是我的确切用例:
我发现除非我从我的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文件进行连接,这将无法正常工作。我将在同一网络上尝试不同的机器......
答案 0 :(得分:2)
是的,Socket.IO可以正常运行跨域。实际的Socket.IO库可以/应该从托管它的服务器加载。
不要这样做。当您从磁盘加载文件而不是通过HTTP加载文件时,会遇到各种奇怪的问题。EXTRA INFO:如果我尝试使用file:///从磁盘打开的HTML文件进行连接,则无法正常工作。
无法加载资源:找不到具有指定主机名的服务器。
这通常意味着您尝试连接的主机名无法解析,表明存在DNS问题或者您输入了主机名。在任何情况下,您的代码示例都不会显示问题可能出现的相关部分。使用浏览器的开发人员工具首先确定所有内容都已正确加载。然后,验证您尝试连接的地址。