我正在构建需要使用套接字连接与另一个应用程序通信的 Web 应用程序。这对我来说是一个新领域,所以要确保 sockets 与 websockets 不同。似乎它们只是在概念上相似。
问是因为最初我计划使用 Django 作为我的项目的基础,但是在我链接到上面的 SO 帖子中,它非常清楚地表明 websockets 是不可能的(或者至少不可靠,即使使用 django-websockets 之类的东西) 使用首选的 Django 设置(带有 mod_wsgi 的 Apache)。然而,我发现其他帖子随便导入 Python 的 socket 模块来实现像 grabbing the server's hostname 这样简单的东西。
所以:
他们真的不一样吗?
是否有任何理由不将 Django 用于依赖与外部服务器建立套接字连接的项目?
回答你的问题。
即使它们(通常)实现了相似的目标,是的,它们确实是不同的。 WebSockets 通常从连接到应用程序服务器的浏览器运行,该协议类似于通过 TCP/IP 运行的 HTTP。因此它们主要用于需要永久连接到其服务器的 Web 应用程序。另一方面,普通套接字更强大和通用。它们通过 TCP/IP 运行,但不限于浏览器或 HTTP 协议。它们可用于实现任何类型的通信。不,没有理由。
Websocket 在其实现中使用套接字。 Websockets 基于定义连接“握手”和消息“帧”的标准协议(现在处于最终调用阶段,但尚未最终确定)。双方通过握手过程相互接受连接,然后使用标准消息格式(“帧”)来回传递消息。
我正在开发一个框架,允许您使用已安装的软件直接与机器进行通信。它可能适合您的目的。如果您愿意,可以关注我的博客:http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html
WebSocket 只是 TCP 协议之上的另一个应用层协议,就像 HTTP 一样。
下面引用了一些
在最简单的形式中,WebSocket 只是两个应用程序之间的通信通道(不一定涉及浏览器)...WebSocket 通信可以在任何类型的应用程序之间使用,但 WebSocket 最常见的用途是促进应用程序之间的通信服务器应用程序和基于浏览器的应用程序。
您必须使用 WebSockets(或一些类似的协议模块,例如 Flash 插件支持的),因为普通的浏览器应用程序根本无法打开纯 TCP 套接字。
可用于 node.js
的 Socket.IO
模块可以提供很大帮助,但请注意,它不是本身就是一个纯 WebSocket 模块。
它实际上是一个更通用的通信模块,可以在各种其他网络协议之上运行,包括 WebSockets 和 Flash 套接字。
因此,如果您想在服务器端使用 Socket.IO
,您还必须使用它们的客户端代码和对象。您无法轻松地与 socket.io
服务器建立原始 WebSocket
连接,因为您必须模拟他们的消息协议。
关于您的问题 (b),请注意 Websocket 规范尚未最终确定。根据W3C:
实现者应该意识到这个规范是不稳定的。
就我个人而言,我认为 Websockets 目前使用起来太前沿了。虽然我可能会在一年左右发现它们很有用。
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)