【问题标题】:Can I use a websocket library for local tcp socket connections in NodeJS?我可以在 NodeJS 中使用 websocket 库进行本地 tcp 套接字连接吗?
【发布时间】:2014-08-02 05:45:10
【问题描述】:

我很难找到一个强大的套接字库来在 node.js 中进行本地 tcp 套接字连接。

我非常喜欢将 SockJS 或 Socket.io 等库用于客户端/服务器套接字连接,但我知道那些使用不同于常规套接字的 websocket。

我想知道是否可以将 Websocket 库用于本地连接,其性能与仅使用常规套接字类似,还是会包含大量不需要的网络开销?

基本上我想用套接字来实现这三件事,我不认为原生网络模块可以开箱即用。

  • 监控其池中每个套接字的运行状况(存活或死亡)。
  • 为每个套接字附加一个 ID,以便您知道数据来自哪里
  • 从通过套接字发送的块构建数据

【问题讨论】:

  • 你需要一个实际的网络库(参见节点中的网络基础库:nodejs.org/api/net.html
  • 我在我的问题中引用了那个库。这就是我所说的“本地网络模块”。

标签: node.js sockets


【解决方案1】:

WebSockets 是一个类似 TCP 的连接,但它实际上运行在已建立的 HTTP(s) 连接之上(它本身在 TCP 连接中运行)。这意味着:

  • 还有额外的开销:所有数据都被放入特殊帧中,除了正常的 TCP 连接建立之外,您还需要建立 HTTP 连接。
  • 它们与普通套接字不兼容,例如您需要在连接的另一端有一个支持 WebSockets 的对等点。

除此之外,它们不会为底层 TCP 连接增加额外的可靠性或功能。例如。使用普通套接字已经可以满足您的要求。

【讨论】:

  • 如果我错了,请纠正我,但 node.js 中的“net”模块暗示了我认为所谓的“原始”套接字。有一个服务器、客户端和一个 Socket 对象,但该对象不知道它在哪里是活着还是死了等等……所以我必须装饰套接字来实现这些功能。我希望也许有使用“net”模块经验的人可以验证这一点,但我对你提到的额外开销不满意,所以看起来我自己在做这项工作。很好的答案。谢谢。
  • @JoshElias:只有当您尝试发送或接收时,您才会注意到您的连接是否断开,没有其他方法可以检查连接是否已死。如果你需要这个功能,你必须在你的应用协议中构建类似心跳协议的东西。
  • 哦,好的。这就说得通了。关于我多久“ping”一次心跳有什么建议吗?
  • @JoshElias:这完全取决于您要检测连接丢失的速度。
  • 好的。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2011-05-18
  • 2022-11-14
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多