socket和websocket之间的区别?

Jon*_*hon 146 sockets mod-wsgi websocket

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

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

所以:

  • 他们真的不一样吗?
  • 是否有任何理由不将Django用于依赖于与外部服务器建立套接字连接的项目?

Pab*_*ruz 117

回答你的问题.

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

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

Rog*_*Gay 18

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

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


ill*_*ato 15

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

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

套接字示例:

(TCP, 8.8.8.4, 8080, 8.8.8.8, 8070)
Run Code Online (Sandbox Code Playgroud)

在哪里:

(protocol, local address, local port, remote address, remote port)
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 10

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

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

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

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

  • @AdamHughes 是的,差不多。我想大多数安全人员都会对 Web 浏览器向互联网上奇怪的地方开放任意 TCP 连接的想法感到愤怒。 (4认同)

smw*_*dia 8

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

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

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


Phi*_*unt 5

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

实施者应该意识到该规范并不稳定。

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

  • 9年后的现在呢? (19认同)