【问题标题】:sockets module vs socket.io module [closed]sockets 模块与 socket.io 模块 [关闭]
【发布时间】:2021-07-24 10:25:22
【问题描述】:

我最近了解了套接字,它们与例如 HTTP 或 AJAX 的区别,并通过套接字模块在我的一些 python 应用程序中用于学习目的。我现在研究在 Web 应用程序中将它们与 flask 一起使用(与以前仅在控制台/终端窗口中运行相比),并注意到几乎所有示例、教程和文档都使用 socket.io。这是为什么?它与 sockets 模块的行为有何不同?

(注意:我不想在网络应用程序中使用任何 JS,只使用 python,因为它是我所熟悉的,我只是将概念证明放在一起)

【问题讨论】:

  • 这能回答你的问题吗? Why Use Socket IO and not just Socket?
  • 您是否知道套接字在与您提到的其他事物完全不同的级别上运行?这个问题类似于问“为什么人们使用汽车而不是车轮?”。
  • 并非如此,因为我所说的问题没有得到解答。 @lepsch
  • @MisterMiyagi 是的,我基本上知道什么是套接字,只是不明白为什么你不能只使用套接字库而不是 socket.io 库。或者他们在什么不同的层面上运作。

标签: python sockets flask


【解决方案1】:

socketssocket.io 的共同点是它们允许两个应用程序直接通过网络进行通信。但是,它们非常不同,因为它们在完全不同的网络层上运行。

套接字在传输层上定义,允许非常直接的通信方式,避免了更高级别协议的复杂性(但也缺乏功能),例如 http 和在 http 之上定义的服务。 sockets 库允许您使用这种类型的套接字。

socket.io 为 JavaScript 应用程序定义了软件“套接字”,但是由于该库变得非常流行(并且运行良好),现在许多语言都存在实现。但是,它在 http 之上运行(作为可能的传输之一,整个事实有点复杂)。 socket.io 中的“套接字”是套接字,因为它们允许直接的点对点通信,但它们在更高的抽象级别上运行。

至于决定使用哪个 - 这取决于您想要交流什么以及您需要与谁或什么交流。

要了解为什么在传输层上运行的东西与在应用层上运行的东西有很大不同,您或许应该阅读 OSI 模型https://en.wikipedia.org/wiki/OSI_model

【讨论】:

    猜你喜欢
    • 2020-10-06
    • 2011-02-11
    • 1970-01-01
    • 2014-07-02
    • 2021-02-16
    • 2015-09-12
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多