套接字和websocket之间的区别?


178

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

发问,因为最初我打算使用Django作为我项目的基础,但是在上面链接到的SO帖子中,很清楚地表明,websocket是不可能的(或者至少不可靠,即使使用django-websockets之类的东西也是如此) )使用首选的Django设置(Apache和mod_wsgi)。但是我发现其他一些文章可以随便导入Python的套接字模块,就像获取服务器的主机名一样简单。

所以:

  • 他们真的不同吗?
  • 有什么理由不将Django用于依赖与外部服务器建立套接字连接的项目吗?

Answers:


141

回答您的问题。

  1. 即使他们实现(一般)类似的事情,是的,他们真正的不同。WebSocket通常从浏览器通过与TCP / IP上运行的HTTP类似的协议运行,该浏览器连接到Application Server 。因此,它们主要用于需要与服务器永久连接的Web应用程序。另一方面,普通套接字更加强大和通用。它们通过TCP / IP运行,但不仅限于浏览器或HTTP协议。它们可以用于实现任何形式的通信。
  2. 不,没有理由。

128
WebSockets与HTTP不相似。它们是带有某些框架和HTTP兼容握手的普通套接字。与HTTP兼容的握手仅允许在Web服务器运行所在的端口上进行WebSocket连接(以便Web服务器可以转发它们),但是一旦建立连接,Web服务器就不会处于循环中。WebSockets不限于浏览器客户端。请参阅同时具有非浏览器客户端和服务器的libwebsocket
kanaka

14
好。我知道了...由于我无法删除此已接受的答案,因此,请您使用正确的信息对其进行编辑。谢谢!
巴勃罗·圣克鲁斯

2
您可以构建websocket客户端,并在浏览器之外使用它们。Websocket协议是HTTP 1.1,具有升级到“ websocket”的连接。
罗杰F.盖伊

2
@huggie不。有一些框架:tools.ietf.org/html/rfc6455#section-5(小消息2字节)。
kanaka 2014年

2
@NiCkNewman实际上可能是一个很好的独立问题。框架开销很小,这不是问题。用于MMO网络的WebSocket的问题有两个方面:它仅是客户端服务器,并且是TCP(基于流)。为了获得良好的MMO网络性能,您还需要直接的对等网络和数据报(一致的低延迟比接收每个数据包更重要)。好消息是WebRTC DataChannel具有这两个属性,因此它将开始填补空白,并允许在浏览器中进行完整的AAA MMO游戏。
kanaka

21

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

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


11

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

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

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

因此,如果要Socket.IO在服务器端使用,则还必须使用其客户端代码和对象。您无法轻松地WebSocketsocket.io服务器建立原始连接,因为您必须模拟服务器的消息协议。


11

WebSocket只是HTTP之上的另一个基于TCP协议的应用程序级协议。

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

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


2

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

实施者应注意,此规范不稳定。

就我个人而言,我认为Websockets暂时无法使用。尽管我可能会在一年左右的时间内发现它们有用。


那9年后的现在呢?
Venryx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.