【问题标题】:Difference between socket and websocket?socket 和 websocket 的区别?
【发布时间】:2011-06-25 19:24:40
【问题描述】:

我正在构建需要使用套接字连接与另一个应用程序通信的 Web 应用程序。这对我来说是一个新领域,所以要确保socketswebsockets 不同。似乎它们只是在概念上相似。

问是因为最初我计划使用 Django 作为我的项目的基础,但是在我上面链接的 SO 帖子中,它非常清楚地表明 websockets 是不可能的(或者至少不可靠,即使有类似的东西django-websockets)使用首选的 Django 设置(带有 mod_wsgi 的 Apache)。然而,我发现其他帖子随便导入 Python 的 socket 模块,就像grabbing the server's hostname 这样简单。

所以:

  • 它们真的不同吗?
  • 对于依赖于与外部服务器建立套接字连接的项目,是否有任何理由不使用 Django?

【问题讨论】:

    标签: sockets websocket mod-wsgi


    【解决方案1】:

    回答您的问题。

    1. 尽管它们(通常)实现了相似的目标,是的,但它们真正不同的。 WebSockets 通常从连接到 Application Server 的浏览器运行,该协议类似于运行在 TCP/IP 上的 HTTP。因此它们主要用于需要永久连接到其服务器的 Web 应用程序。另一方面,普通套接字更强大和通用。它们通过 TCP/IP 运行,但不限于浏览器或 HTTP 协议。它们可用于实现任何类型的通信。
    2. 没有。没有理由。

    【讨论】:

    • WebSockets 与 HTTP 不同。它们是带有一些框架和 HTTP 兼容握手​​的普通套接字。与 HTTP 兼容的握手只是为了允许 WebSocket 在与运行 Web 服务器的端口相同的端口上连接(以便 Web 服务器可以转发它们),但是一旦建立连接,Web 服务器就不在循环中。 WebSockets 不限于浏览器客户端。请参阅libwebsocket,它同时具有非浏览器客户端和服务器。
    • 好的。我明白了...由于我无法删除此已接受的答案,因此请您使用正确的信息对其进行编辑。谢谢!
    • 您可以构建 websocket 客户端并在浏览器之外使用它们。 websocket 协议是 HTTP 1.1,升级到“websocket”连接。
    • @huggie 不。有一点框架:tools.ietf.org/html/rfc6455#section-5(小消息为 2 个字节)。
    • @NiCkNewman 实际上这可能是一个很好的单独问题。框架开销很小,不是问题。用于 MMO 网络的 WebSockets 的问题有两个:它只是客户端服务器,它是 TCP(基于流)。为了获得良好的 MMO 网络性能,您还需要直接的点对点网络和数据报(一致的低延迟比接收每个数据包更重要)。好消息是 WebRTC DataChannel 具有这两个属性,因此它将开始填补空白并允许在浏览器中进行完整的 AAA MMO 游戏。
    【解决方案2】:

    您必须使用 WebSockets(或一些类似的协议模块,例如 Flash 插件支持的),因为普通的浏览器应用程序根本无法打开纯 TCP 套接字。

    node.js 可用的 Socket.IO 模块可以提供很多帮助,但请注意,它不是本身就是一个纯 WebSocket 模块。

    它实际上是一个更通用的通信模块,可以各种其他网络协议之上运行,包括 WebSockets 和 Flash 套接字。

    因此,如果您想在服务器端使用Socket.IO,您还必须使用他们的客户端代码和对象。您不能轻易地与socket.io 服务器建立原始的WebSocket 连接,因为您必须模拟他们的消息协议。

    【讨论】:

    • 为什么普通的浏览器应用程序不能简单地打开一个纯TCP套接字,只是好奇?这是因为javascript不支持吗?
    • @AdamHughes 是的,差不多。我想大多数安全人员都会对 Web 浏览器打开任意 TCP 连接到互联网上陌生地方的想法感到愤怒。
    【解决方案3】:

    关于您的问题 (b),请注意 Websocket 规范尚未最终确定。根据W3C

    实施者应该意识到这个规范是不稳定的。

    我个人认为 Websockets 目前使用起来太前沿了。虽然我可能会在一年左右发现它们很有用。

    【讨论】:

    • 9年后的现在呢?
    • 很确定它们现在很常用。许多网站都有由 websockets 提供支持的实时或实时更新功能,尽管各种client libraries 提供“回退到轮询”功能以防服务器支持缺失。
    【解决方案4】:

    Websocket 在其实现中使用套接字。 Websockets 基于定义连接“握手”和消息“帧”的标准协议(现在处于最终调用阶段,但尚未最终确定)。双方通过握手过程相互接受连接,然后使用标准消息格式(“帧”)来回传递消息。

    我正在开发一个框架,让您可以使用已安装的软件直接与机器进行通信。它可能适合您的目的。如果你愿意,可以关注我的博客:http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

    【讨论】:

      【解决方案5】:

      WebSocket 只是 TCP 协议之上的另一个应用层协议,就像 HTTP 一样。

      下面引用了一些sn-ps,希望能帮助你更好地理解WebSocket。

      在最简单的形式中,WebSocket 只是一个通信通道 在两个应用程序之间(不一定是浏览器 涉及)...WebSocket 通信可以在任何种类的 应用程序,但 WebSocket 最常见的用途是方便 服务器应用程序和基于浏览器的应用程序之间的通信。

      【讨论】:

        【解决方案6】:

        WebSocket 是一种计算机通信传输协议(如 TCP、HTTP 1.0、HTTP 1.1、HTTP 2.0、QUIC、WebRTC 等)

        套接字是一个端点,用于通过网络发送和接收数据(如端口号)

        套接字示例:

        (TCP, 8.8.8.4, 8080, 8.8.8.8, 8070)
        

        地点:

        (protocol, local address, local port, remote address, remote port)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-04
          • 2021-10-08
          • 2012-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-10
          相关资源
          最近更新 更多