我有一个使用socket.io的node.js服务器。这个想法是允许两个不同的html文件通过这个服务器相互通信。一切都很好用socket.io ver0.9.16直到1.0版出来。现在,我在客户端和服务器端都收到一些错误,最明显的(对我来说,因为我刚接触到这个)是我在启动本地托管的server.js文件时发现的ERR_NAME_NOT_RESOLVED错误并尝试通过客户端html连接到它。
当我在谷歌浏览器中打开控制台时,我发现此错误每隔一秒左右再次打印到控制台:
GET http://file/socket.io/?EIO=2&transport=polling&t=1406247171961-0 net::ERR_NAME_NOT_RESOLVED
以下是我的html和server.js文件以及我的html文件用来连接服务器的js文件中可能出现问题的地方片段。
的index.html
我认为这段代码从localhost服务器获取socket.io客户端代码。这是我认为我遇到问题的第一个地方
<script src="http://localhost:4000/socket.io/socket.io.js "></script>
此外,以下是我导入index.js文件的位置,该文件用于连接服务器
<script type="text/javascript" src="scriptsTeacher.js" ></script>
-
server.js
此代码(根据我的消息来源)应在localhost上设置一个服务器,端口为4000,客户端可以连接并发送/接收信息
var io;
io = require('socket.io').listen(4000);
io.on('connection', function(socket)
{
console.log("user connected");
});
-
index.js
此代码由index.html使用,它使用socket.io连接到侦听端口4000的服务器。
var socket = io.connect('localhost:4000');
-
目前,我可以找到两个明显的错误。它们可能不是问题的根源,但只要我有限的调试经验可以带我去。
ERR_NAME_NOT_RESOLVED:(注意:我查看了socket.io ERR_NAME_NOT_RESOLVED,因为该用户使用http:\\而不是http:/来输入错误,所以它并不完全有用/)。如前所述,在Google Chrome中打开index.html并访问控制台时,我收到多个ERR_NAME_NOT_RESOLVED错误。
访问localhost时没有“欢迎使用socket.io”消息:4000 我确定应该有这样的消息。请注意,没有404错误,当我启动服务器时,我可以访问该网页,但它是空白的。如果服务器没有运行,那么我会收到“找不到网页”消息。
我的问题是:我有什么不做但应该做的吗?正如我所说,我是新手,在互联网上狩猎之后,我怀疑有一些服务器(HTTP,Express,Express 3/4?)我没有建立。但是,需要注意的是,代码的工作方式与ver0.9.16相同(使用.socket()和.listen()函数,这些函数已从我的代码中删除,以便迁移到ver1.0)。如果有任何遗失的信息,我会尽快提供。
-
我正在使用:
Macintosh OS 10.6.8
谷歌浏览器版本36.0.1985.125
socket.io ver1.0
node.js v0.10.29
答案 0 :(得分:5)
错误中的地址错误(假设您尚未设置本地名称解析程序)。
错误中的地址以:
开头file
什么时候应该开头:
localhost:4000
问题可能出在Web应用程序(而非服务器)的某些js-config
文件中。或者您可能尝试在本地访问该文件(例如,只需在浏览器中打开html文件),而不是键入地址localhost:4000
。
答案 1 :(得分:1)
我遇到了在浏览器中运行文件的相同问题: 例如。 &#34;文件:/// C:/apppath/index.html" 尝试从服务器运行 例如。 &#34; http://your.app:4000/index.html&#34;
答案 2 :(得分:0)
我遇到了类似的问题,但我的问题的解决方案与CORS无关。在我的情况下,这是一个使用socket.io的Cordova 4.0.0应用程序,我使用了错误的URL作为套接字服务器。我正在使用这样的套接字服务器URL:
//socketserver.example.com:8000
这在桌面Chrome浏览器中运行良好,但在手机或模拟器上的Cordova webview中,有很多关于以
开头的URL的GET和POST请求失败的错误http://file/socket.io
我的案例中的正确网址原为:
http://socketserver.example.com:8000
请注意URL开头的完整方案。
答案 3 :(得分:0)
我遇到了同样的问题 - 我无法通过Mac上同一台机器上的客户端连接到我的socket.io服务器。我禁用了防火墙,它解决了这个问题。我想我们可以使用xhr-polling来克服这个问题。
维克拉姆