我正在构建需要使用套接字连接与另一个应用程序通信的Web应用程序。这对我来说是一个新的领域,因此要确保sockets与websockets不同。看起来它们只是在概念上相似。
问起因为我最初计划使用Django作为我的项目的基础,但是在上面链接的SO帖子中,很明显webocket是不可能的(或者至少不可靠,即使是像django-websockets)使用首选的Django设置(Apache与mod_wsgi)。然而,我发现其他帖子随便导入Python的套接字模块,就像grabbing the server's hostname这样简单。
所以:
答案 0 :(得分:96)
回答你的问题。
答案 1 :(得分:13)
Websockets在其实现中使用套接字。 Websockets基于标准协议(现在在最终调用中,但尚未最终),定义了连接“握手”和消息“帧”。双方通过握手程序相互接受连接,然后使用标准消息格式(“帧”)来回传递消息。
我正在开发一个框架,允许您使用已安装的软件直接与机器进行通信。它可能适合您的目的。如果您愿意,可以关注我的博客:http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html
答案 2 :(得分:9)
您必须使用WebSockets(或某些类似的协议模块,例如Flash插件支持的协议模块),因为普通的浏览器应用程序根本无法打开纯TCP套接字。
Socket.IO
可用的node.js
模块可以提供很多帮助,但请注意,它本身不是纯粹的WebSocket模块。
它实际上是一个更通用的通信模块,可以在各种其他网络协议(包括WebSockets和Flash套接字)之上运行。
因此,如果要在服务器端使用Socket.IO
,还必须使用其客户端代码和对象。您无法轻松地与WebSocket
服务器建立原始socket.io
连接,因为您必须模拟其邮件协议。
答案 3 :(得分:6)
WebSocket只是TCP协议上的另一种应用程序级协议,就像HTTP一样。
一些片段< Spring in Action 4>引用如下,希望它能帮助你更好地理解WebSocket。
最简单的形式是,WebSocket 只是 一个沟通渠道 两个应用程序之间(不一定是浏览器) 参与)... WebSocket通信可以在 之间使用 应用程序 ,但WebSocket的最常见用途是方便 服务器应用程序和基于浏览器的应用程序之间的通信。
答案 4 :(得分:2)
关于您的问题(b),请注意Websocket规范尚未最终确定。根据{{3}}:
实施者应该意识到这个规范不稳定。
我个人认为Websockets目前使用过于流畅。虽然我可能会在一年左右的时间内发现它们有用。
答案 5 :(得分:0)
我怪这个名字叫“ WebSocket”。它们在很多方面都不同。他们唯一的共同之处是他们都进行网络通信。
python中的 sockets
只是BSD套接字实现的库,您可以建立与TCP / IP相关的连接。尽管WebSocket建立在现有的HTTP协议之上并“升级”到WebSocket协议的连接,因为没有简单的方法可以在HTTP中建立双工连接。
答案 6 :(得分:0)
WebSocket 是一种计算机通信传输协议(如 TCP、HTTP 1.0、HTTP 1.1、HTTP 2.0、QUIC、WebRTC 等)
套接字是一个端点,用于通过网络发送和接收数据(如端口号)
套接字示例:
(TCP, 8.8.8.4, 8080, 8.8.8.8, 8070)
哪里:
(protocol, local address, local port, remote address, remote port)