在其他端口上使用 socket.io

Posted

技术标签:

【中文标题】在其他端口上使用 socket.io【英文标题】:use socket.io on other port 【发布时间】:2012-11-02 04:08:14 【问题描述】:

我正在尝试基于 NodeJS 和 Socket.IO 进行聊天 当我在同一个端口 4040 上运行它时,所有工作都很好

但是当我将 socket.io 的源代码放在其他端口上时,它在 ie6 和 ie7 和 8 上不起作用我看到每次获取新数据时页面都会刷新

很快,我有了一个基于 php 80 端口的网站,我基于 nodeJs 4040 端口进行了聊天

网站工作正常,聊天在端口 4040 上也能正常工作

这是socket.io的源码

在端口 4040 上工作正常:

<script src="/socket.io/socket.io.js"></script>

工作但在 ie 6 7 8 上有问题

<script src="http://mywebsite.com:4040/socket.io/socket.io.js"></script>

请不要将我的问题降级,因为我知道你们中的许多人都没有 100% 理解我的问题

【问题讨论】:

哇,你已经知道了,仍然勇敢地发布这个问题......嗯;)那么你指的是哪个 other 端口,任何其他或只是一个特定的端口.. 【参考方案1】:

我是 socket.io 的新手,到目前为止,我真的很喜欢我所看到的。

我只是想指出对@sdedelbrock 帖子的一个小修正。

您可能应该使用(如建议的那样):

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

因为这将假定服务器也在同一台机器上(使用localhost)。这就是我的一些开发人员所做的,当我部署他们的代码时,它根本不起作用(客户端页面找不到我们的服务器)。

我尝试过并且似乎效果很好的方法是让 XHR 自动解析 host 部分,只需提供端口号即可。

改用以下内容

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect(':4040');
</script>

因此,无论我部署到哪个环境(即:DEV、TEST、STAGE 或 PROD 等),它始终会解析正确的主机名客户端。这就是我们想要的。

【讨论】:

【参考方案2】:

您不应该那样更改端口,这是更改端口的最佳方式。

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

这里我们调用相对于你的应用的JS文件,并在socket的初始化中指定端口。

【讨论】:

您可能已将轮询方式更改为 JSON-P 轮询,请查看link 示例:` io.set('transports', [ 'websocket' , 'flashsocket' , 'htmlfile' , 'xhr-polling' , 'jsonp-polling' ]); );`【参考方案3】:

这里是关于如何初始化客户端的 socket.io 文档的链接:https://socket.io/docs/v4/client-initialization/

【讨论】:

以上是关于在其他端口上使用 socket.io的主要内容,如果未能解决你的问题,请参考以下文章

基于 NodeJs 打造 Web 在线聊天室

基于 socket.io 实现实时你画我猜游戏

在其他端口上使用 socket.io

我可以将默认端口从 8080 更改为 Vue 中的其他端口吗?

即使没有其他进程阻塞该端口,Node.js 应用程序也无法在端口 80 上运行

重定向到其他端口,保留所有其他端口