我使用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');
两者都没有明显的差异!?
答案 0 :(得分:2)
因此,对于您的上一个问题,如果您只是在没有参数的情况下调用io()
,那么它将默认为提供HTML的主机。
至于其余部分,需要解释很多,但我会尽量简短。您想要了解网络以获取详细信息。
底线是客户端必须知道如何找到您的服务器。这意味着它需要一个IP地址。它可以直接获取IP地址(就像您在工作示例中所做的那样),也可以通过主机名解析。
主机名解析由客户端在其/ etc / hosts文件中查找,或者通过查询DNS服务器获取完全限定的域名。