【问题标题】:Express vs Socket.ioExpress 与 Socket.io
【发布时间】:2019-06-21 16:21:56
【问题描述】:

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

这让我想,为什么我们不直接使用带有不同命名空间的 socket.io 而根本不使用 express?

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

如果我需要双向通信,是否建议将客户端 -> 使用 express 的服务器,然后使用套接字作为服务器 -> 客户端?

【问题讨论】:

    标签: express socket.io


    【解决方案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 连接并定义您自己的消息是另一种选择。

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

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

    选择 Ajax 调用 Express 的原因:

    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?

    【讨论】:

    • 感谢您的信息和参考。假设我正在构建一个具有用户之间聊天功能的 Twitter 克隆。我应该在登录时建立 1 个套接字连接还是只在用户打开聊天时建立连接并在用户关闭聊天时关闭连接?
    • @Punisher - 出于服务器可扩展性的原因,您可能只会在用户参与聊天会话时创建 socket.io 连接。通常最好是空闲用户不使用任何服务器资源。
    • 实时通知怎么样?我是否必须始终保持 socket.io 连接可用?
    • 如果你想高效及时地推送数据到浏览器客户端进行实时通知,那么你需要使用webSocket、socket.io(建立在webSocket之上)或者server-会外活动。无论您使用哪个实时通知,当您想要接收服务器通知时,您必须不断地从客户端连接到服务器。
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多