【问题标题】:Node.js with socket.io带有 socket.io 的 Node.js
【发布时间】:2013-11-24 22:40:16
【问题描述】:

我希望使用 node.js 和可能的 socket.io 构建一个 Web 应用程序,但是对于是使用 socket.io 还是使用纯 http,我有很多困惑。在应用程序中,node.js 服务器基本上是一个 api 服务器,它为 javascript 客户端提供 json,或者也可能是移动客户端。该网络应用程序还将为其用户提供聊天信使,这就是 socket.io 的用武之地。

  • 我不确定是否将 socket.io 用于整个应用程序或仅用于聊天部分。虽然我的应用程序本身可以从 socket.io 中受益,但我认为使用普通 http 和客户端向服务器发出更多请求是无法完成的。

  • 我在几个地方读到过,socket.io 有时难以为更多用户扩展。

  • 当客户端系统中有防火墙时,Socket.io 经常崩溃并特别创建问题。

  • 更重要的是.....我查看了socket.io用户列表并没有找到很多用户,所以很想知道什么样的平台更了解像facebook messenger,google talk等聊天网络建立在,是否使用 http-ajax 构建并继续查询服务器。

请帮助我解决这个问题。有些人可能会争辩说这是一个基于意见的问题。但实际上我想弄清楚socket.io的实现及其限制。

【问题讨论】:

  • Socket.io 不会强制你使用 websocket。 Websockets 让你的应用程序实时,你可以使用任何其他支持的传输方式,jsonp 等。
  • @GeoPhoenix 是的,我明白这一点,但我在这里谈论的是 socket.io 和纯 http。仅在它们之间进行比较

标签: node.js sockets socket.io


【解决方案1】:
  • Socket.io 比普通的 http 更快。我建议您全部使用它,因为您必须首先进行聊天。
  • 在我的例子中,实时德州扑克类游戏可以接收多达 2500 个并发节点进程。但是,如果您将传输从 websocket 更改为 xhr-polling,它可以接收比纯 websocket 多 10 倍的数据。您的应用程序只是聊天,所以我想稍微慢一点不会有问题。如果你确定你会超过这个数字,是的,扩展 socket.io 是一件很痛苦的事情。
  • 只有在为 80 和 443 以外的端口打开 socket.io 时才会出现此问题。如果您已经有其他语言的前端 Web 服务器,您仍然可以在另一个子域上使用 socket.io 以便能够在端口上运行80 与您的主前端 Web 服务器不冲突。 Socket.io 支持跨域没有问题。
  • 您使用过 trello.com 吗?如果没有,请尝试:)。它最适合任务管理,甚至是一些敏捷的事情。他们使用了socket.io。 https://c9.io/ 是另一个。它是具有类似 google doc 协作的在线 IDE。需要注意的一点是 socket.io 中的 xhr-polling trasport 与带有长轮询的 http-ajax 相同(比一般的 ajax 更好)。您可以在以下位置阅读更多信息: http://book.mixu.net/node/ch13.html

【讨论】:

    【解决方案2】:

    我建议通过 HTTP 为您的 API 提供服务,并将实时业务留给 Socket.io。如果您不喜欢使用 Websockets,就像@GeoPheonix 所说的那样,您可以使用 socket.io 和 sockjs (https://github.com/sockjs/sockjs-node) 从多种传输方法中进行选择。

    就扩展而言,我为一个非常大的应用程序部署了一个基于 socket.io 的实时分析/跟踪服务,平均有 400 多个并发连接,没有明显的性能影响,但这可能取决于实现和硬件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2023-03-24
      • 2021-12-30
      • 2011-12-27
      • 2016-06-06
      • 2017-07-27
      • 2015-04-01
      相关资源
      最近更新 更多