Express vs Socket.io

Express vs Socket.io,express,socket.io,Express,Socket.io,我刚刚开始使用socket.io,对express有一些经验。我知道socket.io具有双向通信,而express是唯一的客户端到服务器的通信 这让我想,为什么我们不在不同的名称空间中使用socket.io,而不使用express呢 在哪些情况下我应该使用socket vs express 在我需要双向通信的情况下,是否建议使用express创建客户端->服务器,然后使用socket创建服务器->客户端?首先使用express和socket.io是完全不同的事情。Express是一个成熟的we

我刚刚开始使用socket.io,对express有一些经验。我知道socket.io具有双向通信,而express是唯一的客户端到服务器的通信

这让我想,为什么我们不在不同的名称空间中使用socket.io,而不使用express呢

在哪些情况下我应该使用socket vs express


在我需要双向通信的情况下,是否建议使用express创建客户端->服务器,然后使用socket创建服务器->客户端?

首先使用express和socket.io是完全不同的事情。Express是一个成熟的web服务器框架。您可以使用它来设置网站、从浏览器发送http请求、发送API的http请求等

io是位于webSocket协议之上的通信层,webSocket协议使用http服务器建立其初始连接。虽然socket.io和Express之间有一点重叠,但它们之间的差异比重叠的要大得多

例如,如果您正在设置一个网站,那么不能使用socket.io来设置,您可以使用类似Express的东西

现在,如果您有特定的编程需要在任意客户机和服务器之间通信,那么您有无数的选择。如果客户端位于浏览器中,并且编程接口来自浏览器中的Javascript,那么您的选择就更少了。 在浏览器中,通过Express使用http ajax请求是一种选择。设置socket.io连接并定义自己的消息是另一种选择

从浏览器Javascript选择socket.io而不是Ajax调用Express的原因:

  • 您需要/想要通过同一渠道进行双向沟通
  • 客户端正在向服务器发送大量请求(一旦套接字已经设置好,发送socket.io消息的开销就低于ajax调用,因此如果发送大量消息,那么socket.io消息比http请求更有效)
  • 选择Ajax调用来表示的原因:

  • HTTP连接是无状态的,寿命短,这使得实现具有故障切换和冗余的大规模多服务器实现变得更容易
  • 有很多工具可用于http连接,从身份验证库到数据格式(MIME)再到音频到视频等等
  • 您希望您的客户端在非活动期间长时间连接socket.io可能不实用的地方运行(可能是移动设备或电池驱动设备)
  • 您希望在代理、防火墙或其他网络基础设施不支持长时间运行的webSocket连接或不允许它们的情况下运行
  • 您需要一个请求/响应模型。HTTP是一种请求/响应,您可以在其中获得每个请求的特定响应,并且您可以确切地知道哪个响应与哪个请求相匹配 所以,正如你所看到的,这个问题没有通用的答案。这实际上取决于您的通信的具体情况、您希望的互操作性以及代码的确切需求

    以下是有关此主题的其他参考资料:


    谢谢您提供的信息和参考资料。假设我正在构建一个twitter克隆,它具有用户之间聊天的功能。我应该在登录时建立1个套接字连接,还是仅在用户打开聊天室时建立连接,并在用户关闭聊天室时关闭连接?@pumpier-出于服务器可扩展性的原因,您可能只会在用户参与聊天会话时创建socket.io连接。通常,如果空闲用户不使用任何服务器资源,这是最好的。实时通知怎么样?我是否必须始终保持socket.io连接可用?如果您希望将数据推送到浏览器客户端以获得实时通知,则需要使用webSocket、socket.io(构建在webSocket之上)或服务器端事件。无论您使用哪种方式进行实时通知,当您想要接收服务器通知时,都必须连续地从客户端连接到服务器。