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

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

So:

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


当前回答

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

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

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

其他回答

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

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

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

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

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

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

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

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

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

回答你的问题。

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)