使用 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 连接到标准套接字的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket 可以连接到 Socket 服务器吗?

无法使用 python 3 websocket 库连接到远程安全 web socket服务器

Web 套接字和 Flash 套接字客户端连接到一个 Node.js

无法连接到 WebSocket 服务器。不知道为啥

从 reactjs 客户端连接到安全 Web 套接字 python 服务器

高级 Restclient 套接字实现无法连接到 Spring Websocket