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

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

So:

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


当前回答

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)

其他回答

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

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

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)

回答你的问题。

Even though they achieve (in general) similar things, yes, they are really different. WebSockets typically run from browsers connecting to Application Server over a protocol similar to HTTP that runs over TCP/IP. So they are primarily for Web Applications that require a permanent connection to its server. On the other hand, plain sockets are more powerful and generic. They run over TCP/IP but they are not restricted to browsers or HTTP protocol. They could be used to implement any kind of communication. No. There is no reason.

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

下面引用了一些< Spring in Action 4> >的代码片段,希望能帮助你更好地理解WebSocket。

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

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

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

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