当前位置: 首页 > 知识库问答 >
问题:

节点.js和 socket.io。WebSocket 的传输类型配置?

柳涵意
2023-03-14

这个问题与套接字有关。io版本

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

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

一切都很好。现在,我也可以向服务器发送消息。但我仍然有一个问题,为什么我必须配置传输。默认 socket.io 使用 websocket 传输设置,如下所示:

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

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

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

我使用node.js版本0.8.16,socket.io版本0.9.13和最新的浏览器:铬,火狐,歌剧

我想使用websocket而不是xhr轮询。

共有1个答案

袁永贞
2023-03-14

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

不支持websocket的绝对不是您正在使用的浏览器或节点。当然是js。这取决于您的服务器设置。

第一次检查:

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

最终解决我的问题是禁用Apache侦听端口80,并让节点.js侦听该端口。以下是关于SO的答案,它帮助了我:https://stackoverflow.com/a/7640966/2347777

 类似资料:
  • 我在express+Socket.io中使用了以下代码 我使用了以下代码: var express=require('express.io'); var app=require('express.io')(); var server=require('http').server(app); var io=require('socket.io')(server); 有没有人知道如何解决这个错误?

  • 问题内容: 由于我在更常规的基础上使用WebSocket连接,因此我对事物的工作原理很感兴趣。因此,我花了一段时间研究无休止的规范文档,但到目前为止,我还没有真正找到有关 分块传输流本身的 任何信息。 WebSocket协议将其称为 数据帧 (描述了纯数据流,因此也称为 非控制帧 )。据我了解,规范没有定义最大长度,也没有定义MTU(最大传输单位)值,这反过来意味着单个WebSocket数据帧可以

  • 我正在使用node-Js(0.10.33)、socket.io服务器和客户机(两者都是1.2.1)和express(3.18.4)构建一个聊天应用程序。我正在使用反向代理来隐藏url(example.com:8083)。我一直面临着自动超时的问题,并分别导致传输错误和传输关闭。下面是我正在使用的文件:server.js client.js 我得到了不必要的ping超时,在某些ping超时后,传输错

  • 有人能帮我吗?我正在使用$lookup在MongoDB中加入以获取日期在日期“X”和日期“Y”之间的所有订单,chef_id是“P”。“日期”部分有问题,没有提供日期的数据。但是当我在单个查找查询中使用它时,它可以正常工作并在日期之间提供数据。但是当我使用$lookup申请加入时,它不会提供数据。这是我的查询 谁能帮帮我。 我的收藏在这里“订购”收藏 这是我的用户收藏 }

  • 问题内容: 用过的 NodeJS,Socket.io 问题 想象有两个用户 U1 和 U2 通过Socket.io连接到应用程序。该算法如下: U1 完全失去Internet连接(例如,关闭Internet) U2 向 U1 发送消息。 U1 尚未收到消息,因为Internet断开 服务器 通过心跳超时检测到 U1 断开连接 U1 重新连接到socket.io U1 从不接收来自 U2 的消息-我

  • NodeJS,socket.io null null 附言。我称之为“消息”的东西不仅仅是可以存储在数据库中的文本消息,而是有价值的系统消息,必须保证交付,否则UI就会出错。 谢了! 我已经有了一个用户帐户系统。而且,我的应用程序已经很复杂了。添加脱机/联机状态没有帮助,因为我已经有了这类东西。问题不一样。 查看步骤2。在这一步上,我们技术上不能说如果U1离线,他只是失去连接,比如说2秒钟,可能是