socket和websocket之间的区别?

问题描述 投票:126回答:6

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

问起因为我最初计划使用Django作为我的项目的基础,但是在我上面链接的SO帖子中,很明显webocket是不可能的(或者至少不可靠,即使像django-websockets这样的东西也是如此)使用首选的Django设置(Apache与mod_wsgi)。然而,我发现其他帖子随便导入Python的套接字模块,就像grabbing the server's hostname这样简单。

所以:

  • 他们真的不一样吗?
  • 是否有任何理由不将Django用于依赖于与外部服务器建立套接字连接的项目?
sockets websocket mod-wsgi
6个回答
102
投票

回答你的问题。

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

13
投票

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

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


9
投票

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

可用于Socket.IOnode.js模块可以提供很多帮助,但请注意,它本身并不是纯粹的WebSocket模块。

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

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


6
投票

WebSocket只是TCP协议上的另一个应用程序级协议,就像HTTP一样。

下面引用一些片段<Spring in Action 4>,希望它可以帮助您更好地理解WebSocket。

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


2
投票

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

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

我个人认为Websockets目前使用过于流畅。虽然我可能会在一年左右的时间内发现它们有用。


0
投票

我责怪“WebSocket”这个名字。它们在很多方面都有所不同。他们唯一常见的事情是他们都进行网络通信。

python中的sockets只是一个BSD套接字实现库,可以建立与TCP / IP相关的连接。虽然WebSocket构建在现有的HTTP协议之上并“升级”与WebSocket协议的连接,因为在HTTP中建立双工连接并不容易。

© www.soinside.com 2019 - 2024. All rights reserved.