Node.js与socket.io的结合

3
我想使用node.js来构建一个Web应用程序,可能会使用socket.io,但是我对是否使用socket.io或者使用普通的HTTP协议感到很困惑。在这个应用程序中,node.js服务器基本上是一个API服务器,向JavaScript客户端或移动客户端提供JSON服务。Web应用程序还将为其用户提供聊天功能,这就是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等。 - Gntem
@GeoPhoenix 是的,我明白,但我在这里谈论的是socket.io和纯http之间的区别。比较只是针对它们两个。 - Saransh Mohapatra
2个回答

0
  • Socket.io比普通的http更快。我建议你在首选聊天时使用它。
  • 就我的情况而言,实时德州扑克类游戏可以通过一个节点进程接收多达2500个并发连接。但是,如果你将传输方式从websocket改为xhr-polling,它可以接收比纯websocket多10倍以上的连接。你的应用程序只是聊天,所以我想稍微慢一点也不会有问题。如果你确定会超过这个数字,那么扩展socket.io会很麻烦。
  • 只有当你将socket.io开放到80和443之外的端口时才会出现这个问题。如果你已经有其他语言的前端Web服务器,你仍然可以在另一个子域上使用socket.io,以便能够在端口80上运行而不与你的主要前端Web服务器冲突。Socket.io支持跨域访问,没有问题。
  • 你用过trello.com吗?如果没有,试试吧 :)。它最适合任务管理或甚至一些敏捷开发。他们使用了socket.io。https://c9.io/是另一个。它是在线IDE,具有类似Google文档的协作功能。需要注意的一件事是,socket.io中的xhr-polling传输与长轮询的http-ajax相同(比一般的ajax更好)。你可以在这里阅读更多信息: http://book.mixu.net/node/ch13.html

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接