使用websockify进行Web服务器“websocket wrap”的最小示例

时间:2017-03-14 23:49:14

标签: javascript websocket websockify

一些关于菜鸟的webdev基本问题。

后台:我有一个使用 websocket 协议的javascript客户端,以及一个很好的旧java服务器,我完全可以通过{{1 }}。我希望他们能够在本地相互通信(传递字符串就足够了)。

为此,我绝对不想在客户端做出深刻的改变。在此之前,我尝试在this指南之后将服务器调整为 websocket ,甚至通过握手但是它非常混乱。

所以在这一点上,我认为处理这个问题的最佳方法是通过TCP-> WebSocket代理服务,如websockify。如果我得到explanation权限,它将“包装”服务器的进程,在新端口中打开“已升级”连接。 websocket 客户端应该能够通过该端口直接与服务器通信。但我一直试图用不同的方法实现这一点而没有成功,因此我的问题

  • 有没有更好的方法来解决这个问题? (这可以解释谷歌的稀疏性,我可以想象这种情况经常发生!)
  • 如果“包装”是最好的方式而且我做对了,如何实施呢?

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

  • 我正在运行this帖子中建议的非常简单的命令行echo服务器:telnet。通过ncat -l 2000 -k -c xargs -n1 echo与它交谈会返回所需的回声。到目前为止一切顺利。

  • 我使用telnet localhost 2000安装了websockify,并运行如下:apt-get,这应该通过端口2023上的websocket连接打开同一台服务器。

  • 此时我仍然可以通过websockify 2023: 2000进行通信,但是我没有在端口2023上获得那么多运气。这是我到目前为止所尝试的:

    • 下载telsocket二进制文件,并调用telnet localhost 2000回复:./telsocket -url ws://127.0.0.1:2023
    • 克隆wssh(websocket的命令行shell),看起来很有希望。我能够安装它,但运行errrr dial tcp 127.0.0.1:2023: connection refused会返回 wssh -l localhost:2023 。显然NameError: name 'PROTOCOL_SSLv3' is not defined存在一些问题(看起来并没有那么深入)。
    • gevent的repo中测试了几个示例,例如wstelnettests中的示例。所有人都给我一个代码400,消息选择了无效协议

后续编辑:深入了解websock.js和wstelnet.js files,通过向JS控制台发出以下内容,我能够获得更具体的结果:

websockify

所以,正如你所看到的,我能够建立连接,但仍然没有得到回声。由于我尝试的每个工具都失败了,所以在服务器端也可能出现错误。救命! d:

备注:由于它打算在本地工作,我不在乎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?? ws。只要它可行且有效,我也没有首选的方法来做到这一点。如果它是相关的,我在Ubuntu15.10 + Firefox47.0

1 个答案:

答案 0 :(得分:2)

最后,我让TCP echo服务器通过 websockify 的代理与 websockify websocket telnet emulator进行通信。这是如何:

  1. 运行echo服务器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 问题。

    definition of do_recv中的

    3.2(这是固定链接),在初始var语句后添加以下行:arr = Array.from(arr);这是转换为数组因为 Uint8Array 显然不支持shift方法。

  4. 使用firefox打开wstelnet.html,选择主机:localhost,端口: 2023,不加密,按连接并输入黑场。

  5. 屏幕应以echoServer received: <YOUR_MESSAGE>回复。 hurray!