在其他端口上使用 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的主要内容,如果未能解决你的问题,请参考以下文章
我可以将默认端口从 8080 更改为 Vue 中的其他端口吗?