本地网络上的 Socket.io/node.js?
Posted
技术标签:
【中文标题】本地网络上的 Socket.io/node.js?【英文标题】:Socket.io/node.js on local network? 【发布时间】:2011-11-19 21:53:15 【问题描述】:我在同一个网络上有两台机器,分别是 192.168.1.2 和 192.168.1.3。
192.168.1.2 = 服务器/开发电脑
192.168.1.3 = 客户端/浏览器电脑
所以在 server/dev pc 上,我有一个 socket.io/http 服务器在端口 82 上运行
在客户端服务器上,我使用 chrome 作为浏览器
服务器正在托管类似的网页
<html>
....
<script type="text/javascript" src="http://localhost:82/socket.io/socket.io.js"></script>
....
</html>
这是 socket.io 客户端所需的必要资源。所以资源加载在我的服务器/开发电脑上,而不是我的客户端电脑上。所以我尝试:
<html>
....
<script type="text/javascript" src="http://192.168.1.2:82/socket.io/socket.io.js"></script>
....
</html>
现在它在任何一台电脑上都不起作用。我知道应该是
<script src="http://<uri:port>/socket.io/socket.io.js"></script>
正如 socket.io github 上所说,但我只想在本地网络上进行测试。
我也看过
<script type="text/javascript" src="http://cdn.socket.io/stable/socket.io.js"></script>
但我使用的是socket.io 0.8.4,所以上面的版本不起作用。
那么,如何在本地网络环境中将 socket.io 资源提供给客户端?或者你们知道我可以使用的提供 0.8.4 版本 socket.io 的网站吗?
注意:不存在防火墙问题。
【问题讨论】:
socket.io.js 将仅作为您的应用正在运行的同一台机器上的服务器,与您使用哪台机器访问它无关。 @Marcel M. 你在说什么?它们一直用于在线聊天应用程序 我的意思是使用localhost
仅在服务器和客户端是同一台机器时才有效,无论端口如何
@MarcelM。我意识到,这就是它不起作用的原因,这就是为什么我要求人们提供一种在本地网络上运行 socket.io 的方法
您收到什么错误信息?服务器上的 Web 根目录中是否存在“/socket.io/socket.io.js”?
【参考方案1】:
替换
<script type="text/javascript" src="http://localhost:82/socket.io/socket.io.js"></script>
与
<script src="/socket.io/socket.io.js"></script>
【讨论】:
只有当客户端和服务器在同一台机器上时才有效 请阅读 github.com/LearnBoost/Socket.IO/wiki/How-do-I-serve-the-client 以及谁 +1 这个答案? 你真的试过了吗?因为这个答案对我来说是正确的。如果仍然无法正常工作,请检查 Chrome 开发者工具的网络或控制台选项卡,了解导致脚本请求失败的原因。 这个答案不起作用。请阅读 github.com/LearnBoost/Socket.IO/wiki/How-do-I-serve-the-client,我的机器在同一个网络上但是是不同的机器,以上仅适用于“如果您的网络应用程序和套接字。 io 在同一个服务器和端口上” 它在您链接的同一页面中这样说:“如果您的 Web 应用程序和 socket.io 在同一服务器和端口上,您可以简单地包括:<script src="/socket.io/socket.io.js"></script>"
【参考方案2】:
如果您使用同一主机的不同端口来服务 socket.io,您可以尝试使用
<script>document.write('<script src="//'+ location.hostname + ':9998/socket.io/socket.io.js">\x3C/script>')</script>
这看起来像一个 hack,但它确实有效,只需将 9998 替换为您为 socket.io 提供服务的端口即可。
【讨论】:
【参考方案3】:尝试让 socket.io 自动连接
var socket = io.connect();
这对我有用。
【讨论】:
【参考方案4】:对于索引:
<script src="/socket.io/socket.io.js"></script>
从客户端连接:
var socket = io.connect('http://192.168.1.3:82', 'forceNew': true);
这对我有用!
【讨论】:
以上是关于本地网络上的 Socket.io/node.js?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js、Socket.io、Redis pub/sub 大容量、低延迟困难
简单的游戏循环 Socket.io + Node.js + Express
需要帮助理解 Socket.io(node.js) 中的以下 jQuery 代码?