5

这个问题的部分原因可能是客户端的讨论太多,我看不到树木的木材。

无论如何,这就是我想要做的。我需要一个独立于平台的 WebSockets 服务器端实现。我希望它在 NodeJS 中运行。

现在,我在这个主题上找到的 99% 的内容都是关于 socket.io 的。但据我所知,这不是 WebSockets,它本身就是一种特殊的“额外”协议。我需要一些“按(尚未)标准”工作的东西。这是有充分理由的,这是不可协商的,相信我。

所以,我尝试了 WebSocket,但这需要(或似乎需要 python,更糟糕的是,Visual Studio)在 Windows 上运行。我需要一些独立于平台的东西,不需要像这样的特殊东西。

我也尝试过 node-websocket-server,但我根本无法让它工作。主页上的示例对我来说失败了。它似乎接受了一个连接,但客户端看不到它,双方都无法发送任何内容,客户端立即将连接视为关闭。事实上,我得到的只是一个“连接”回调,然后它似乎死了。在调试模式下运行并没有告诉我任何有用的信息,除了一些关于某些对象或其他没有 flush() 方法的内部错误。我半怀疑这是一个已经失效的项目?

所以,我没有想法。是否有可能说服 socket.io 完全按照 WebSockets 的(非)规范工作?有没有办法让 node-websocket-server 表现出我找不到的行为。有没有办法绕过 websocket 中的 Visual Studio 依赖项,或者是否有其他一些基于 NodeJS 的工具可以满足我的所有要求?

哦,另一件事,我希望该工具与“连接”和平共处,因为我将它用于我的常规文档服务。

4

2 回答 2

4

当我尝试在不同的平台上使用Socket.IO时,我遇到了完全相同的问题,而没有客户端的直接端口(并且没有自己移植它的动机)。

我最终将我的代码移动到使用ws,这是一个基于标准的 websocket 节点实现,没有来自 socket.io 的添加糖。

在我的情况下,它在几个不同的平台上运行得非常好,但是您需要重新编写大部分连接/重新连接代码等。

网站:链接

GitHub:链接

新PM:npm install ws

于 2012-12-18T07:58:36.373 回答
1

Socket.io 在后台使用 WS,因此您可能会在 Windows 上遇到相同的安装问题。您可能会发现它抱怨您需要安装 Visual Studio 2010 才能使ws组件正常工作。

node-gyp但是,您可以通过环境变量配置运行 C++ 编译器所使用的 Visual Studio 版本。

例子:

  • GYP_MSVS_VERSION=2012为 Visual Studio 2012设置
  • 设置GYP_MSVS_VERSION=2013e(“e”代表“特快版”)

有关完整列表,请参阅 - https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py#L209-294

这对于 NodeJS 的 Windows 用户来说是一件痛苦的事情,因为它假定您安装了许多非开发最终用户永远不会拥有的 Visual Studio 的副本。所以我正在游说 Joyent 鼓励他们将 Web 套接字作为 CORE 节点的一部分,并将 GNU gcc 编译器作为 NodeJS 安装的一部分,这样我们就可以永久解决这个问题,而不必强迫 Windows 节点用户调整他们的环境或下载其他任何东西。

欢迎在以下位置添加您的投票:

注意:Joyent 团队表示 socket.io 将在编译ws失败时回退到使用较慢的实现。换句话说,您的代码仍将运行 - 只是没有那么快。对于执行依赖于 socket.io 或 ws 的任何应用程序安装的最终用户来说,这一点尚不清楚,因为它在安装过程中显示红色错误文本,导致用户认为安装失败,而实际上它会运行,尽管速度很慢。

于 2014-08-01T00:53:01.213 回答