问题标签 [engine.io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2183 浏览

nginx - WebSocket 在建立连接之前关闭 - 生产中的 Socket.io 使用错误

我已经设置了一个套接字 io Web 应用程序,它在本地系统上运行良好,但在生产服务器上,它不起作用,我看到了这些日志

客户端日志

服务器端的日志

我有这些 nginx 配置(我已将非 ssl 流量重定向到 ssl 端口 443

0 投票
0 回答
50 浏览

socket.io - engine.io [RangeError: 超出最大调用堆栈大小]

随机获取RangeError:通过 Socket.IO 房间概念将数据发送到连接的客户端时超出了最大调用堆栈大小。经过几个论坛,它说数据对象可能有自引用数组 Node.js + Socket.io 超过最大调用堆栈大小可能会发生此异常,但在我的代码中,我在纯字符串数据和数据对象中都出现异常还。

以下是示例代码片段

发送纯文本

堆栈跟踪

发送对象数据

堆栈跟踪

0 投票
0 回答
46 浏览

javascript - 使用 Socket.io 和 http 轮询的共享用户

我正在尝试使用带有 Node.js 的 Socket.io 将 Aws Lambda 用于我的应用程序。

由于 lambda 上的 websocket 限制,我决定使用 http 轮询,但是当客户端执行第一个接收 SID 的请求时,在第二个请求中,服务器抛出Session id unknown,因为触发了另一个实例并且没有该用户在内存中。

我尝试将socket.io-redis其用作 socket.io 的 redis 适配器,我尝试使用express-sessionand共享 redis 上的会话,express-socket.io-session但没有任何效果。

在我的 server.js 上,我有:

分析engine.io(socket.io使用的lib)代码,我看到异常是在哪里抛出的:

而且这个变量clients没有复杂的实现,只是一个局部变量。

所以,我的问题是:

是否可以使用 socket.io 为多个实例创建共享用户存储? (例如,保存在 redis 上并使 socket.io 找到此 redis 实例的会话 id 而不是内存变量)。

提前致谢。

0 投票
0 回答
50 浏览

javascript - socket.io:与其他用户共享 socket.id

我有一个 socket.io 信令服务器,我需要在其中允许两个连接的客户端相互发现并交换信息。

我正在考虑为此使用socket.id,因为它是使用如下代码进行连接的真正唯一值:

官方文档(例如https://socket.io/docs/v3/client-api/#socket-id)说 id 是“套接字会话的唯一标识符”。所以我担心,我可以安全地将session.id一个用户的信息广播给其他用户,还是允许他们劫持会话?

我找不到任何关于它的文档 - 只是session.id似乎来自 engine.io。

0 投票
0 回答
281 浏览

react-native - 如果连接断开一次,React Native socket.io websocket 将无法连接

我正在使用 React Native (0.63.4) 和 socket.io 客户端 (2.4.0) 连接到我的 socket.io 服务器:

一切正常且稳定,直到连接间歇性中断。一旦断开连接并建立 Internet 连接,socket.io 就会进入这个无限循环:

除非我重新启动我的应用程序,否则我无法连接它(热重新加载也无济于事)。我已经尝试过forceNewsettruefalse,没有任何区别。如果我使用polling传输而不是websocket问题消失(连接建立并在断开/重新连接后成功工作),但我想使用 websockets。

我究竟做错了什么?(我不能使用 v3.x,因为服务器在 2.x 上)

0 投票
3 回答
166 浏览

node.js - 套接字 IO 允许来自 curl 的 CORS 请求,但不允许来自客户端应用程序

我正在制作一个应用程序,其中有一个节点后端和一个角度前端。

我正在使用 socket.IO 在我的客户端和服务器之间进行通信。

我正面临 CORS 问题,我将其解决(尝试)为:

但是,从我的客户端应用程序(在另一个端口运行)提出请求后,我仍然遇到了 CORS 问题。

所以我去了我的终端,并用 curl 提出了一个请求,如下所示

这表明我 curl 能够访问服务器,并且没有面临 CORS 问题。

在我的客户端中,我试图连接到我的服务器:

帮助我解决我的问题,以便我可以连接到我的服务器。

另附注:如果应用程序中 server.io 的版本为 3,则对服务器的 curl 请求也会失败。只有在 server.io 版本 4 上,curl 请求才会通过。

如果有帮助,Firefox中的错误:

编辑:我的问题是无法使用客户端连接到服务器。我展示了 curl,因为它是在 socket.io cors 配置网页中建议的。

0 投票
0 回答
13 浏览

socket.io - 尽管响应格式正确,引擎 IO 客户端解析器错误?

我正在尝试使用socket.io. 我分析了网络面板并确定客户端使用套接字 IO与端点https://gs.ethercrash.io通信。

在查看客户端和服务器之间交换的数据时,服务器对第一个数据包的响应是:

并且交换按预期继续进行。

所以我在本地 React 应用程序上尝试了以下操作:

正如预期的那样,发送的请求看起来与从 ethercrash 应用程序发送的请求几乎相同。唯一的区别是我EIO=4在 ethercrash 应用程序使用EIO=3. 事实上,响应是相同的,正如预期的那样:

然而,经过一段时间的故障排除后,我发现了以下错误:

为什么?我们收到完全相同的数据。为什么会出现解析器错误?