2013-02-18 386 views
3

这里有很多websocket - >套接字包装器(比如websockify),但是那里有相反的东西吗?具体来说,我希望能够通过应用程序连接到TCP套接字,并将代理转换为websocket并转移到另一个websocket服务器。TCP Socket到Websocket?

回答

4

从WebSocket客户端到TCP服务器的桥接是一种通用解决方案,它将较低级别的TCP协议封装到较高层级别的WebSocket协议。它允许浏览器(或其他websocket客户端)与任意TCP服务器进行通信。请注意,客户端(JavaScript)应用程序仍必须能够对TCP服务器说的协议进行解码/编码。

反向操作不是通用的,需要从TCP客户端应用程序到桥接器的消息进行特殊组帧,以便桥接器将知道如何将WebSocket消息编码到TCP服务器。 WebSockets是基于消息的传输,而TCP是较低级别的流传输。 TCP传输层在协议本身中没有消息的概念,因此必须在高层处理。换句话说,您将不得不做大量的工作来使您的TCP客户端应用程序能够与桥应用程序进行通信,因为它将直接在应用程序中实现WebSocket客户端。实际上,直接实现可能更少,因为已经有大多数流行语言可用的WebSocket客户端库。

您将无法通过网桥将预先存在的TCP客户端连接到现有的WebSocket服务器,而无需更改客户端和网桥(以添加消息边界和操作码信息),或者您将需要特殊的WebSocket服务器忽略WebSocket消息边界并将传入数据视为流(在较高层处理消息解析)。

也许你可以给一个用例,你认为这可能有用吗?

免责声明:我做了websockify。

+1

那么,例如,您的websockify在VNC服务器上使用,以使用noVNC。我需要将本地客户端连接到该VNC服务器,但只有websockified部分才会暴露给互联网。所以看起来我可能真的有我的工作为我.. – 2013-02-18 23:03:29

+0

标记这是答案,因为它是当时最适用。感谢您的帮助,kanaka。 – 2013-03-06 18:59:39

+0

@ kanaka,你不是不得不在websockify中实现非边界数据流吗?从TCP服务器返回到浏览器客户端的数据本质上最初是一个数据流。 – 2014-10-31 15:37:59

0

我不完全清楚你要问什么,但WebSocket API主要适用于客户端。

您如何对服务器端脚本进行编码以及您使用何种语言完全取决于您。编写服务器端脚本时,应该能够选择是否使用TCP套接字等。

+0

呃,什么?我认为这是比较清楚的。 – 2013-02-18 23:03:51

1

我不确定你在找什么,但为了帮助未来的人,我会写我所做的解决我的问题。

我的问题: 我希望能够举办noVNC我的web应用程序的服务器上,我想非WebSocket的VNC服务器能够理解它,而无需使用websockify。

我的解决办法: 我用ws-tcp-bridge Node.js的模块弥合的WebSocket端口< --lport>其中noVNC客户端将连接到与VNC TCP服务器的主机。

举例: 这种情况从vncserver的机器运行以下命令:

ws-tcp-bridge --method=ws2tcp --lport=5555 --rhost=127.0.0.1:5902

这样,我就能够在端口5902举办非的WebSocket的vncserver并通过noVNC与它连接在港口5555

没有测试过这个,但是与x11vnc vnc服务器配合得很好。