问题标签 [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 投票
3 回答
240863 浏览

node.js - 哪个 websocket 库与 Node.js 一起使用?

目前有大量用于 node.js 的 websocket 库,最流行的似乎是:

但是我在它们之间找不到任何可靠的具体比较......显然 Socket.io 很棒,但已经过时并且构建失败。ws 和 websocket-node 都声称它们是最快的。engine.io 似乎是新的,但比更轻的 altarntives 重得多。

如果我们或某人能够整理出一个答案,作为使用哪个套接字库以及何时使用以及它们之间的比较的指南,那将是令人惊奇的。

0 投票
1 回答
3880 浏览

node.js - 需要Engine.IO教程

嗨,我正在尝试使用 Engine.IO。正如 StackOverflow 上所述,它应该是 Socket.IO 的低级版本。它也应该更好,更新。它还应该让我能够轻松地在浏览器客户端和 Node.js 服务器之间交换消息。多哈。

我从上到下阅读了这两页:

https://github.com/LearnBoost/engine.io

https://github.com/learnboost/engine.io-client

但这无济于事,这些手册似乎是为已经知道如何使用该技术的人编写的,而不是为尝试学习该技术的人编写的。连最基本的部分都不见了。

客户端脚本应该如何到达浏览器?

我应该在浏览器中输入“hello world”的登陆地址是什么?

一步一步的指示开始?

请帮忙!当您尝试学习类似的东西时,这并不容易!

这是客户端脚本应该是的:

但现在那是什么?索引.html?这是什么意思呢?如何使用它?

现在这里是“服务器”部分:

为什么会分成三部分?哪一个对应于客户端示例?也许我听起来很愚蠢,但如何让“你好世界”继续下去?

0 投票
1 回答
136 浏览

sockjs - 在 Engine.IO 和 SockJS 之间进行选择

如何在 Engine.IO 和 SockJS 之间进行选择?他们是在竞争,这只是品味和意见的问题,还是在他们之间进行选择时有一些逻辑?

0 投票
0 回答
594 浏览

node.js - Node.js - 在服务器上压缩数据,通过 Engine.IO Web Sockets 发送,在客户端解压

我在服务器上 GZip 一些 JSON 数据,通过 Web Sockets 的 Engine.IO 实现发送它

并使用我使用 Browserify ( http://browserify.org/ )导入的 ZLIB 模块对其进行解压缩

但是我得到了这个错误('decoded'显然是未定义的):

有任何想法吗?

0 投票
0 回答
216 浏览

node.js - 跨多个 IP 地址的聊天应用程序

我已经在几个不同的应用程序中成功实现了 Node.js 和 Socket.io。它们都是相当简单的网站。他们只需要一台在后台运行 Node.js/Socket.io 的 Apache Web 服务器,即可同时向数百个连接的用户接收和发送即时消息。

现在,我无法理解如何运行类似的应用程序,在这些应用程序中,用户可以连接到 5 个不同的 Apache Web 服务器中的任何一个,所有服务器都是负载平衡的。

例如,假设用户 #1 连接到服务器 10.10.10.1(5 个负载平衡服务器之一)并开始与也在 10.10.10.1 上运行的其他用户聊天(使用 Node.js/Socket.io)。

然后,用户 #20 连接到 10.10.10.2 并希望开始与 10.10.10.1 上的用户聊天。 我将如何连接到 10.10.10.1 以便用户 #20 可以开始与其他用户聊天? 同样,我如何向所有用户广播消息,无论他们当前连接到 10.10.10.1 还是 10.10.10.2 ... 等等?

您能否推荐如何使用 Socket.io 设置跨多个服务器(IP 地址)的环境,以便无论用户连接到哪个服务器,都可以向用户发送和接收消息?

0 投票
1 回答
1158 浏览

javascript - 我应该使用哪个 node.js 套接字引擎?

我正在着手构建一个跨网站和 Android 应用程序的实时聊天应用程序的项目。由于我想防止对各种 API 调用进行连续轮询,因此我想使用 websockets(我没有经验),在此过程中,我认为学习 node.js 是一个好主意。所以我需要开始为 node.js 使用 websockets 库。为此,我看到有很多选项列表。我读得最多的是socket.io。

在 SO 附近,我还读到 socket.io v0.9 有很多错误,我看到多个关于 engine.io 是 socket.io 版本 1.0 中 socket.io 的新后端的参考资料,据说是“指日可待”。所有这些消息都来自 2012 年(例如这个),当我查看socket.io 网站时,我发现它们仍然是 v0.9,这让我想知道一些事情:

  • socket.io 是否仍在积极开发中?
  • socket.io 是一个可行的选择,还是我需要住在另一个图书馆?
  • 您会推荐哪一个以便于启动,或者 node.js 现在是否实现了良好的套接字(例如通过使用net.Socket)?

欢迎所有提示!

0 投票
3 回答
21600 浏览

websocket - Engine.io 或 SockJS,选择哪一个?

我最近在 Socket.io 上遇到了关于内存泄漏和扩展问题的麻烦。我决定使用 Socket.io 是在一年前做出的,当时它无疑是最好的库。

现在 Socket.io 引起了很多麻烦,我花时间寻找同时可用的替代方案,并认为 Engine.io 和 SockJS 通常都非常适合我。但是,在我看来,两者都有一些缺点,我不确定该选择哪一个。

Engine.io 基本上是 Socket.io 的完美轻量级版本,它不包含我不需要的所有功能。我已经为 Socket.io 编写了自己的重新连接和心跳逻辑,因为我对默认逻辑不满意,而且我从未打算使用 Socket.io 提供的房间或其他功能。

但是 - 在我看来 - Engine.io 的主要缺点是建立连接的方式。客户端从较慢的 jsonp-polling 开始,如果它们支持更好的传输,则会升级。与使用过时浏览器的客户端相比,原生支持 websockets 的客户端(数量稳步增加)的缺点是连接过程更长且不稳定,这与我对如何处理它的感觉相矛盾。

另一方面,SockJS 完全按照我的意愿处理连接。从我读到的内容来看,它似乎相当稳定,而 Engine.io 目前有一些问题。

我的应用程序在单个域上的 Nginx 路由器后面运行,因此我不需要 SockJS 提供的跨域功能。然而,由于提供了这个功能,SockJS 根本不会暴露客户端的 cookie 数据。到目前为止,我通过 cookie 和查询字符串令牌对 Socket.io 进行了 2 因素授权,而这对于 SockJS 是不可能的(使用 Engine.io 会)。

我已经阅读了几乎所有可用的内容以及两者的优缺点,但到目前为止似乎没有太多讨论或发布,尤其是关于 Engine.io (这里只有 8 个用 engine.io 标记的问题)。

  • 您更喜欢这两个库中的哪一个,出于什么原因?你在生产中使用它们吗?

  • 哪一个可能会得到更积极的维护,并且将来可能比另一个更有优势?

0 投票
1 回答
1226 浏览

javascript - 与 engine.io 的 Nodejs 服务器/客户端套接字连接

我正在尝试在正在侦听端口 8888 的 engine.io 套接字侦听器和在普通 index.html 中运行的 javascript 客户端之间建立一个简单的套接字连接

完成这项任务看起来相当简单,但不知何故我无法正确连接 xhr-polling 客户端。它连接,因为客户端数量增加,但客户端永远不会触发 onopen 事件。相反,服务器端的客户端数量只会不断增加,客户端永远不会从服务器接收任何消息 - 服务器也不会从客户端接收任何消息。

这一切都与 websocket 传输完美配合,但我也需要 xhr-polling 才能工作。

应用程序.js

索引.html

客户端控制台

0 投票
1 回答
323 浏览

node.js - Node.JS 可扩展(使用 Node.JS-cluster)socket-server 和 Engine.IO,配对/同步(也称为第二屏)两个设备,在同一个 worker 上……

我有一个问题……我想运行一个 NodeJS 套接字服务器(我的决定是使用 EngineIO,从阅读性能/跨浏览器/等……)并能够扩大规模(添加内核)。因此我想使用集群模块(即使在实验阶段,似乎每个人都说它可靠)。我考虑在 nginx 中使用负载均衡器,但对于这个项目来说似乎有点太复杂了(到处都提到这是高级选项)。

所以我需要解决的大问题是这样的:我需要在同一个线程上有两个不同的设备,这样他们就可以“说话”(第二屏解决方案> 例如这个:https ://www.google.com/ intl/en/chrome/browser/promo/supersync/)。反正EngineIO好像不支持共享存储(比如共享RedisStore),我觉得自己实现有点太高级了……

所以我正在考虑一个设置,我将每个进程工作人员放在不同的端口上,然后,当其中一个设备连接到该特定工作人员上的 EngineIO 实例(由 nodejs 集群负载平衡)时,它可以显示一个独特的代码(应该在第二个设备上输入),最后一个数字会让第二个设备知道要连接到哪个端口。我发现我需要粘性会话来使每个设备的连接保持在同一个线程上(或者至少是第一个设备,因为当我连接 EngineIO.

我设法在不同的端口上启动了多个工人......但感觉有些不对劲。我还没有找到任何关于开发人员实现这种结构的示例。也许这并没有错,但我觉得我应该得到别人的意见。所以我的问题是:在不同的端口上拥有不同的工作进程,以便能够知道与第二个设备连接到哪个端口是一个好主意吗?像这样的东西:

当然,EngineIO 是解决方案的重要组成部分,它没有包含在上面的代码中,但这是下一步。

0 投票
2 回答
3252 浏览

node.js - Web 套接字和 Flash 套接字客户端连接到一个 Node.js

我在将 Flash 客户端连接到 Node.js 服务器时遇到问题。

短篇小说

我第一次构建了一个 Node.js 服务器,它应该由 Web 客户端 (WebSocket) 和 Flash 客户端 (Socket) 使用。当然,Web 客户端就像一个魅力,但我无法克服 Flash 客户端。我得到 SECURITY_ERROR。经过一天的研究,我认为这是因为未加载策略文件。想法(engine.io 之上的首要)?

长篇大论

我正在使用Primus,因为我认为我会需要它,因为我有网络套接字和闪存套接字要处理。不确定这是否准确?:)

我将Engine.io用作“变压器/传输器”——该层使用的主要框架。我不会讨论标准的 Web 客户端(使用 Chrome 和 primus-client),因为它很容易设置。

我在 AS3 中使用简单和标准的套接字:

在 Flash IDE 中构建它时,它会转到onSocketConnect函数,但如果我尝试向 socked 写入任何内容 - 我会断开连接。如果我从 Web 浏览器运行它,我会进入该onSecurityError方法。

我必须说我在节点控制台中没有任何痕迹!

据我所知,当策略文件出现错误时会引发安全错误,因此我开始寻找解决方案。

我在网上阅读了很多东西,最常见的解决方案是简单地使用socket.io和所谓的FlashSocket.IO. 我尝试实现它,但它太旧了,有些代码丢失了,我终于从hurlant库中得到了一些错误——我无法让它工作。

我还看到了一些名为 的节点包policy,它运行单独的服务器来提供策略文件。

我尝试在其中添加一个transport数组flashsocket- 没有变化。我也不明白为什么所有的样本都在使用transports——我已经搜索过并且都index.jsprimus.js使用transport(为什么有两个单独的文件,耶稣?!)

我可以尝试只使用engine.iowithout primus,但我不知道这是否有任何帮助。我发现的所有帖子和示例都很旧 - 请帮助我提供任何最新的解决方案或至少解释需要做什么 - 对我来说似乎是一个全新的宇宙:)

提前致谢!

编辑: 感谢 The_asMan,我发现它与握手有关。我已经尝试过这个简单的例子(尽管它已经很老了)——它非常适合 Flash 客户端!当然,我不能将 Web 套接字连接到它,因为握手不正确 - 它有某种协议。

所以我想我只需要了解如何获取<policy-file-request/>in 节点 - 我将能够返回策略文件。但我不知道如何得到它 - 我没有收到任何类型的dataconnect处理程序......