socket.io客户端连接' http:// localhost'不起作用?

时间:2018-04-07 10:31:25

标签: node.js socket.io

我使用node.js&运行服务器MacOS上的socket.io为本地网络中的不同客户端提供服务。 据我所知,socket.io库必须首先在客户端加载,如文档https://socket.io/docs/中所述:

<script src="/socket.io/socket.io.js"></script>
<script>
   var socket = io('http://localhost');
…
</script>

这似乎只是一个提议模板,因为这根本不起作用(或者我做错了什么?)?

所以我改变了#34; localhost&#34;到我的服务器的实际IP地址+端口(192.168.178.2:3000)现在一切正常,特别是对于MacOS,iOS,Android和Android等不同的客户端平台。 Windows(想要!)。

问题是,我想在不同的本地网络中交替使用服务器,因此需要更改IP地址。但要始终指定服务器地址&#34;硬连线&#34;手动(!)的方式非常麻烦,似乎不实际。必须有更好的解决方案!

所以我用逻辑名做了一些实验。 首先我添加了端口:

var socket = io('http://localhost:3000');

这可以(至少)工作,但仅限于mac本身,服务器也运行在哪里!?

然后更具体一点:

var socket = io('http://theNameOfMyMac.local:3000');

Voila,现在也适用于外部设备!大! 但等等,只有MacOS和iOS,而不是Windows和Android设备。 太糟糕了,因为这对我的问题来说是一个切实可行的解决方案! 所以,我回到我的初始解决方案,我总是必须在HTML文件中指定实际的IP地址。没有其他似乎有帮助吗?

有人可以向我解释为什么这样做会有什么可能解决方案? 也许HTML代码可以自动在HTML文件中获取(调用!)服务器地址?但是如何?

顺便说一下,如果没有区别:

var socket = io('http://192.168.178.2:3000');
and
var socket = io.connect('http://192.168.178.2:3000');

两者都没有明显的差异!?

1 个答案:

答案 0 :(得分:2)

因此,对于您的上一个问题,如果您只是在没有参数的情况下调用io(),那么它将默认为提供HTML的主机。

至于其余部分,需要解释很多,但我会尽量简短。您想要了解网络以获取详细信息。

底线是客户端必须知道如何找到您的服务器。这意味着它需要一个IP地址。它可以直接获取IP地址(就像您在工作示例中所做的那样),也可以通过主机名解析。

主机名解析由客户端在其/ etc / hosts文件中查找,或者通过查询DNS服务器获取完全限定的域名。