socket和websocket的区别?

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

问是因为最初我计划使用Django作为我的项目的基础,但在我上面链接的SO帖子中,它非常清楚地表明,使用首选的Django设置(Apache with mod_wsgi) websockets是不可能的(或者至少不可靠,即使是像Django -websockets这样的东西)。然而,我发现其他文章随意地导入Python的套接字模块,就像获取服务器的主机名一样简单。

所以:

  • 它们真的不同吗?
  • 对于依赖于与外部服务器建立套接字连接的项目,有什么理由不使用Django呢?
166734 次浏览

回答你的问题。

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

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

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

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

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

关于你的问题(b),请注意Websocket规范还没有最终确定。根据W3C:

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

就个人而言,我认为Websockets目前使用起来太前卫了。不过我可能会在一年左右的时间里发现它们有用。

Websockets在实现中使用套接字。Websockets基于一个标准协议(现在是最终调用,但还不是最终调用),该协议定义了一个连接“握手”和消息“帧”。双方通过握手过程相互接受连接,然后使用标准消息格式(“帧”)来回传递消息。

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

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

一些片段<Spring在Action 4>中引用如下,希望能帮助你更好地理解WebSocket。

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

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

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

Socket示例:

(TCP, 8.8.8.4, 8080, 8.8.8.8, 8070)

地点:

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