本地网络上的 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】:

替换

&lt;script type="text/javascript" src="http://localhost:82/socket.io/socket.io.js"&gt;&lt;/script&gt;

&lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt;

【讨论】:

只有当客户端和服务器在同一台机器上时才有效 请阅读 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 在同一服务器和端口上,您可以简单地包括:&lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt;"【参考方案2】:

如果您使用同一主机的不同端口来服务 socket.io,您可以尝试使用

&lt;script&gt;document.write('&lt;script src="//'+ location.hostname + ':9998/socket.io/socket.io.js"&gt;\x3C/script&gt;')&lt;/script&gt;

这看起来像一个 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 大容量、低延迟困难

Node.js:socket.io 关闭客户端连接

简单的游戏循环 Socket.io + Node.js + Express

需要帮助理解 Socket.io(node.js) 中的以下 jQuery 代码?

Socket.io (Node.js) 未检测到连接的 QTcpSocket

使用 socket.io/node.js 在网页上显示流式 Twitter