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

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

So:

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


当前回答

回答你的问题。

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 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)

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

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

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

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

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

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

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

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

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

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

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

因此,如果你想使用Socket。IO在服务器端也必须使用它们的客户端代码和对象。你不能轻易地建立到套接字的原始WebSocket连接。IO服务器,因为您必须模拟他们的消息协议。