使用 websockify 的网络服务器 "websocket wrapping" 的最小示例

Minimal example of "websocket wrapping" for web server using websockify

菜鸟的一些 webdev 基本问题。

背景:我有一个使用websocket协议的java脚本客户端,还有一个很好的旧java 服务器,我完全可以通过 telnet 与之交互。我希望他们能够在本地相互通信(传递字符串就足够了)。

为此,我绝对不想对客户端进行深入更改。在此之前,我尝试按照 this 指南使服务器适应 websocket,甚至通过了握手,但它变得非常混乱。

所以在这一点上,我认为处理这个问题的最佳方法是通过 TCP->WebSocket 代理服务,例如 websockify. If I got the explanation 对,它会 "wrap" 服务器的进程,打开新端口中的 "upgraded" 连接。 websocket 客户端应该能够通过该端口直接与服务器通信。但是我一直在尝试用不同的方法来实现这个但没有成功,因此我的 questions:



实施 - 已编辑:为了测试,我尝试构建一个简单的回显服务器:


后续 - 已编辑:深入研究 websock.js 和 wstelnet.js files,我能够获得更具体的结果通过向 JS 控制台发出以下命令:

ws = new Websock()
ws.open("ws://127.0.0.1:2023", "binary") // connects, proxy says: connecting to: :2000, Plain non-SSL (ws://) WebSocket connection, Version hybi-13, base64: 'False'
ws.send_string("hello server")           // send and wait for echo 
ws.get_rQ()                              // empty??

因此,如您所见,我能够建立连接,但仍然没有收到回音。错误也可能出在服务器端,因为我尝试的每个工具都失败了。帮助! D:


备注:因为它打算在本地工作,所以我不在乎 wswss。只要可行且有效,我也没有首选方法。如果相关,我在 Ubuntu15.10 + Firefox47.0

最后,我让 TCP 回显服务器通过 websockify 的代理与 websockifywebsocket telnet emulator 通信。是这样的:

  1. 运行回显服务器ncat -l 2000 -k -c 'xargs -n1 echo echoServer received'
  2. 在单独的进程中,运行 代理:websockify 2023 :2000
  3. 克隆存储库:git clone https://github.com/novnc/websockify.git,并对 wstelnet.js 进行以下更改:

    3.1 将行 ws.open(uri) 更改为 ws.open(uri, "binary") 允许克服 代码 400 问题。

    3.2 在 definition of do_recv(这是一个永久链接)中,在初始 var 语句之后添加以下行: arr = Array.from(arr); this is a conversion to Array 因为 Uint8Array 显然不支持 shift 方法。

  4. 用 firefox 打开 wstelnet.html,select 主机:本地主机,端口: 2023,无加密,按 连接 并在黑色字段中输入。

屏幕应回复 echoServer received: <YOUR_MESSAGE>hurray!