套接字和websocket之间的区别?

我正在构build需要使用套接字连接与另一个应用程序通信的Web应用程序。 对我来说这是一个新的领域,所以要确保套接字不同于websocket 。 看起来他们只是在概念上相似。

问起,因为最初我计划使用Django作为我的项目的基础,但是在上面链接的SOpost中,已经明确指出websocket是不可能的(或者至less不可靠,即使是像django-websockets )使用首选的Django设置(Apache与mod_wsgi)。 然而,我发现其他职位随便导入Python的套接字模块,像抓住服务器的主机名一样简单。

所以:

  • 他们真的不一样吗?
  • 有没有任何理由不使用Django的项目,依靠与外部服务器build立套接字连接?

回答你的问题。

  1. 即使他们实现(一般)类似的事情, 是的 ,他们真的不同。 WebSockets通常运行于通过与TCP / IP上运行的HTTP类似的协议连接到Application Server的浏览器。 因此,它们主要针对需要永久连接到其服务器的Web应用程序。 另一方面,普通套接字更强大,更通用。 它们运行在TCP / IP上,但不限于浏览器或HTTP协议。 他们可以用来实现任何forms的沟通。
  2. 不,没有理由。

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

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

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

可用于node.jsSocket.IO模块可以提供很多帮助,但请注意,它本身并不是纯粹的WebSocket模块。

它实际上是一个更通用的通信模块,可以运行各种其他networking协议之上 ,包括WebSocket和Flash套接字。

因此,如果您想在服务器端使用Socket.IO ,则还必须使用其客户端代码和对象。 您不能轻易地将原始WebSocket连接到socket.io服务器,因为您必须模拟它们的消息协议。

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

实现者应该知道这个规范是不稳定的。

我个人认为Websockets目前在使用边缘太过stream血。 虽然我可能会在一年左右发现它们有用。

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

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

WebSocket最简单的forms就是两个应用程序之间的通信通道(不一定涉及浏览器)… WebSocket通信可以在任何types的应用程序之间使用 ,但是WebSocket最常见的用途是促进服务器应用程序和基于浏览器的应用程序