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

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

So:

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


当前回答

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

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

其他回答

回答你的问题。

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.

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

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

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

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

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

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

在其最简单的形式中,WebSocket只是一个通信通道 在两个应用程序之间(不一定是浏览器) 涉及到)…WebSocket通信可以用于任何类型的 应用程序,但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)