问题标签 [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.
node.js - 哪个 websocket 库与 Node.js 一起使用?
目前有大量用于 node.js 的 websocket 库,最流行的似乎是:
- https://github.com/Worlize/WebSocket-Node
- https://github.com/einaros/ws
- https://github.com/LearnBoost/engine.io
- https://github.com/learnboost/socket.io
- https://github.com/sockjs
但是我在它们之间找不到任何可靠的具体比较......显然 Socket.io 很棒,但已经过时并且构建失败。ws 和 websocket-node 都声称它们是最快的。engine.io 似乎是新的,但比更轻的 altarntives 重得多。
如果我们或某人能够整理出一个答案,作为使用哪个套接字库以及何时使用以及它们之间的比较的指南,那将是令人惊奇的。
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?这是什么意思呢?如何使用它?
现在这里是“服务器”部分:
为什么会分成三部分?哪一个对应于客户端示例?也许我听起来很愚蠢,但如何让“你好世界”继续下去?
sockjs - 在 Engine.IO 和 SockJS 之间进行选择
如何在 Engine.IO 和 SockJS 之间进行选择?他们是在竞争,这只是品味和意见的问题,还是在他们之间进行选择时有一些逻辑?
node.js - Node.js - 在服务器上压缩数据,通过 Engine.IO Web Sockets 发送,在客户端解压
我在服务器上 GZip 一些 JSON 数据,通过 Web Sockets 的 Engine.IO 实现发送它
并使用我使用 Browserify ( http://browserify.org/ )导入的 ZLIB 模块对其进行解压缩
但是我得到了这个错误('decoded'显然是未定义的):
有任何想法吗?
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 地址)的环境,以便无论用户连接到哪个服务器,都可以向用户发送和接收消息?
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)?
欢迎所有提示!
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 标记的问题)。
您更喜欢这两个库中的哪一个,出于什么原因?你在生产中使用它们吗?
哪一个可能会得到更积极的维护,并且将来可能比另一个更有优势?
javascript - 与 engine.io 的 Nodejs 服务器/客户端套接字连接
我正在尝试在正在侦听端口 8888 的 engine.io 套接字侦听器和在普通 index.html 中运行的 javascript 客户端之间建立一个简单的套接字连接
完成这项任务看起来相当简单,但不知何故我无法正确连接 xhr-polling 客户端。它连接,因为客户端数量增加,但客户端永远不会触发 onopen 事件。相反,服务器端的客户端数量只会不断增加,客户端永远不会从服务器接收任何消息 - 服务器也不会从客户端接收任何消息。
这一切都与 websocket 传输完美配合,但我也需要 xhr-polling 才能工作。
应用程序.js
索引.html
客户端控制台
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 是解决方案的重要组成部分,它没有包含在上面的代码中,但这是下一步。
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.js
在primus.js
使用transport
(为什么有两个单独的文件,耶稣?!)
我可以尝试只使用engine.io
without primus
,但我不知道这是否有任何帮助。我发现的所有帖子和示例都很旧 - 请帮助我提供任何最新的解决方案或至少解释需要做什么 - 对我来说似乎是一个全新的宇宙:)
提前致谢!
编辑: 感谢 The_asMan,我发现它与握手有关。我已经尝试过这个简单的例子(尽管它已经很老了)——它非常适合 Flash 客户端!当然,我不能将 Web 套接字连接到它,因为握手不正确 - 它有某种协议。
所以我想我只需要了解如何获取<policy-file-request/>
in 节点 - 我将能够返回策略文件。但我不知道如何得到它 - 我没有收到任何类型的data
或connect
处理程序......