gpt4 book ai didi

javascript - node.js 和 socket.io。 websocket 的传输类型配置?

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:30 24 4
gpt4 key购买 nike

This question concerns socket.io versions < 0.9.x. Newer versions have different transports and methods of setting transports.

我在两周内测试了 node js 和 socket.io。当我开始时,我从客户端的 socket.send(message) 函数中得到了问题。我无法向服务器发送任何消息。但我仍然可以从服务器接收消息。当我找到服务器端的配置传输时,我解决了这个问题:

socket.set('transports',[
'xhr-polling'
, 'jsonp-polling'
]);

一切都很好。现在我也可以向服务器发送消息了。但是我还有个疑问为什么要配置transport。默认 socket.io 使用这样的 websocket 传输设置:

socket.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);

所以它首先使用的是websocket,而不是xhr-polling。但是当使用socket.send(msg) 甚至socket.emit(...) 时,服务器无法接收到客户端发送的任何消息。

所以问题是:这里不支持 websocket 的是什么?浏览器或 node.js ... 对不起,我从谷歌搜索了很多页面,但我还没有找到答案。

我使用 node.js 0.8.16 版、socket.io 0.9.13 版和最新的浏览器:chrome、firefox、opera

我想使用 websocket 而不是 xhr-polling。

最佳答案

这很奇怪,因为即使您的服务器配置不支持 websockets,socket.io 也会选择下一个最佳可用方法(在您的情况下为 xhr-polling)。实际上,您甚至不需要设置这些传输,因为 socket.io 默认会尝试使用“websocket”作为主要方法。这可能表明存在其他问题,可能与您的代码有关?

不支持 websockets 的绝对不是您使用的浏览器,当然也不是 node.js。这将取决于您的服务器设置。

首先检查:

  1. 您正在监听的端口在您的防火墙中打开
  2. 您的网络服务器支持网络套接字。如果您使用 Apache 并将您的请求代理到内部 IP:PORT,除非您安装类似 apache-websocket 的东西,否则 websocket 将无法工作。或 pywebsocket

最终解决我的问题的是禁用 Apache 监听端口 80 并让 node.js 监听该端口。这是对我有帮助的关于 SO 的答案:https://stackoverflow.com/a/7640966/2347777

关于javascript - node.js 和 socket.io。 websocket 的传输类型配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14333942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com