使用 WebSocket 连接到标准套接字
Posted
技术标签:
【中文标题】使用 WebSocket 连接到标准套接字【英文标题】:Connect to standard socket using WebSocket 【发布时间】:2013-03-29 14:15:52 【问题描述】:我有一个通过标准 TCP 套接字进行通信的硬件设备的客户端接口。是否可以在 Chrome 等浏览器中使用 WebSocket 连接到此?这是我用来连接的代码:
var ws = new WebSocket("ws://127.0.0.1:13854");
ws.onopen = function() ...
到目前为止,客户端在第一行就失败了。 WebSockets 使用标准本地套接字不熟悉的自己的协议是否存在问题?我已经尝试指定其他协议('http://...' 和 'tcp://...'),但这没有奏效。
【问题讨论】:
WebSocket 是一种特殊的协议,它使用 HTTP 进行握手,然后使用底层套接字进行真正的通信。因此,您不能使用 websocket 连接到常规 tcp 套接字,因为它们是两个不同的东西。 【参考方案1】:正如thejh 已经解释的那样,WebSockets 不会在您提供数据时传输数据,而是在数据流中添加框架和掩码。因此,无法使用 websocket 与未实现 WebSocket 协议的应用程序进行通信。
但是有一个解决方法:Websockify 服务器可以用作代理,在 websocket 客户端和非 websocket 服务器之间进行桥接。客户端不直接与应用程序通信,而是与 websockify 服务器通信。 Websockify 解包 Websocket 数据流并将其中继到服务器。然后将来自服务器的响应打包到 WebSocket 帧中并发送到客户端。
【讨论】:
【参考方案2】:Web Sockets 使用一种特殊的协议。例如,任何 websocket 连接都以 HTTP 连接开始,并在双方同意通过 HTTP 更改为 websocket 协议后更改为 websocket 连接。抱歉,您不能使用 websockets 与任意 TCP 服务器通信。如果您想做类似的事情,您可能必须使用 Flash 或 Java 小程序。
【讨论】:
或者从服务器建立连接并隧道通过。 对,除非服务器无法始终到达设备,或者您没有服务器,因为您是作为扩展程序运行的。以上是关于使用 WebSocket 连接到标准套接字的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 python 3 websocket 库连接到远程安全 web socket服务器
Web 套接字和 Flash 套接字客户端连接到一个 Node.js