首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用websockify的web服务器"websocket包装“的最小示例

使用websockify的web服务器"websocket包装“的最小示例
EN

Stack Overflow用户
提问于 2017-03-14 23:49:13
回答 1查看 5.6K关注 0票数 2

一些webdev的基本问题给一个菜鸟。

后台:我有一个使用websocket协议的javascript客户机和一个很好的旧服务器,我完全可以通过telnet与它进行交互。我希望它们能够在本地相互通信(传递字符串就足够了)。

为此,我绝对不想对客户做深刻的改变。在此之前,我试图使服务器适应websocket,遵循指南,甚至通过了握手,但它变得相当混乱。

因此,在这一点上,我认为处理这一问题的最佳方法是通过TCP->WebSocket代理(如websockify )提供服务。如果我得到正确的解释,它将“包装”服务器的进程,在一个新端口中打开“升级”连接。websocket客户端应该能够通过该端口直接与服务器对话。但是我一直试图用不同的方法来实现它,但没有成功,因此我的质疑

  • 有更好的方法来解决这个问题吗?(这就解释了谷歌的不协调,我可以想象这种情况经常发生!)
  • --如果“包装”是最好的方法,而且我做对了,如何实现它?

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

  • 我正在运行 post中建议的非常简单的命令行回送服务器:ncat -l 2000 -k -c xargs -n1 echo。通过telnet localhost 2000与其对话将返回所需的回波。到目前一切尚好。
  • 我使用websockify安装了apt-get,并按如下方式运行:websockify 2023: 2000,它应该通过端口2023上的websocket连接打开同一台服务器。
  • 在这一点上,我仍然能够通过telnet localhost 2000进行组合,但是我对端口2023没有那么好的运气。这就是我迄今为止尝试过的:
代码语言:javascript
复制
- Downloaded the [telsocket](https://github.com/lafikl/telsocket) binary, and called `./telsocket -url ws://127.0.0.1:2023`. **Response:** **`errrr dial tcp 127.0.0.1:2023: connection refused`**
- Cloned [wssh](https://github.com/progrium/wssh) (a command line shell for websocket), which seems very promising. I was able to install it, but running `wssh -l localhost:2023` returns **`NameError: name 'PROTOCOL_SSLv3' is not defined`**. Apparently some problems with `gevent` (didn't look much further into that).
- Tested the several examples in `websockify`'s repo, like [wstelnet](https://github.com/novnc/websockify/blob/master/wstelnet.html), or the ones in [tests](https://github.com/novnc/websockify/tree/master/tests). All of them got me a **code 400, message Invalid protocol selected**.

后续编辑的:深入研究websock.js和wstelnet.js 文件,通过在JS控制台中发布以下命令可以获得更具体的结果:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-15 16:59:29

最后,我通过websockify的代理获得了与websockify的websocket telnet仿真器通信的TCP服务器。如下所示:

  1. 运行回送服务器ncat -l 2000 -k -c 'xargs -n1 echo echoServer received'
  2. 在一个单独的进程中,运行代理:websockify 2023 :2000
  3. 克隆repo:git clone https://github.com/novnc/websockify.git,并对wstelnet.js进行以下更改: 3.1将ws.open(uri)行改为ws.open(uri, "binary")允许克服代码400的问题。 3.2在重计 (这是permalink)中,在初始的var语句之后添加以下行:arr = Array.from(arr); --这是对Uint8Array的转换,因为Uint8Array显然不支持shift方法。
  4. 使用火狐打开wstelnet.html,选择主机:localhost,端口: 2023,无加密,按连接并键入黑域。

屏幕应该用echoServer received: <YOUR_MESSAGE>进行回复。万岁!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42798652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档