Express与Socket.io

时间:2019-06-21 16:21:56

标签: express socket.io

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

这让我想,为什么我们不只将socket.io与不同的命名空间一起使用,而根本不使用express?

在哪种情况下应该使用套接字vs表达?

在需要双向通信的情况下,是否建议使客户端->服务器具有express,然后将套接字用于服务器->客户端?

1 个答案:

答案 0 :(得分:1)

首先,express和socket.io是完全不同的东西。 Express是成熟的Web服务器框架。您可以使用它来建立网站,浏览器发出的HTTP请求,API的http请求等等。

socket.io是位于webSocket协议之上的通信层,并且webSocket协议使用http服务器建立其初始连接。尽管您可以使用socket.io和Express进行一些重叠,但是它们的重叠之处要大得多。

例如,如果您要建立一个网站,则无法使用socket.io进行操作,而将使用Express之类的东西。

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

通过浏览器Javascript对Express进行Ajax调用来选择socket.io的原因:

  1. 您需要/希望通过同一频道进行双向通信。
  2. 客户端正在向服务器发送大量请求(套接字已经设置好后,发送socket.io消息的开销比ajax调用要低,因此,如果要发送很多消息,那么socket.io消息比http请求更有效)

原因以选择对Express的Ajax呼叫

  1. HTTP连接是无状态的,并且寿命很短,可以简化具有故障转移和冗余的大规模多服务器实施。
  2. 从身份验证库到数据格式(MIME)到音频到视频等,都有许多用于HTTP连接的工具...
  3. 您希望客户端在不活动的时间段内长时间连接socket.io的设备(可能是移动设备或电池供电的设备)上不可行。
  4. 您要在代理,防火墙或其他网络基础结构可能不支持长时间运行的webSocket连接或明确禁止它们的情况下运行。
  5. 您需要一个请求/响应模型。 HTTP是请求/响应,您可以在其中获得每个请求的特定响应,并且您确切知道哪个响应与哪个请求一起进行。

因此,如您所见,这个问题没有通用答案。这实际上取决于您的通信的具体情况,所需的互操作性以及代码的确切需求。

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

Ajax vs Socket.io

Websocket vs REST when sending data to server

Using AJAX vs. socket.io socket messages

websocket vs rest API for real time data?