一些webdev的基本问题给一个菜鸟。
后台:我有一个使用websocket协议的javascript客户机和一个很好的旧服务器,我完全可以通过telnet与它进行交互。我希望它们能够在本地相互通信(传递字符串就足够了)。
为此,我绝对不想对客户做深刻的改变。在此之前,我试图使服务器适应websocket,遵循这指南,甚至通过了握手,但它变得相当混乱。
因此,在这一点上,我认为处理这一问题的最佳方法是通过TCP->WebSocket代理(如websockify )提供服务。如果我得到正确的解释,它将“包装”服务器的进程,在一个新端口中打开“升级”连接。websocket客户端应该能够通过该端口直接与服务器对话。但是我一直试图用不同的方法来实现它,但没有成功,因此我的质疑
实现-编辑的:为了进行测试,我尝试构建一个简单的回显服务器:
ncat -l 2000 -k -c xargs -n1 echo。通过telnet localhost 2000与其对话将返回所需的回波。到目前一切尚好。apt-get,并按如下方式运行:websockify 2023: 2000,它应该通过端口2023上的websocket连接打开同一台服务器。telnet localhost 2000进行组合,但是我对端口2023没有那么好的运气。这就是我迄今为止尝试过的:- 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控制台中发布以下命令可以获得更具体的结果:
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:
备注:由于它是在本地工作的,所以我不介意有ws或wss。我也没有一个更好的方法来做到这一点,只要它是可行的和有效的。如果与此相关,我使用的是Ubuntu15.10 + Firefox47.0
发布于 2017-03-15 16:59:29
最后,我通过websockify的代理获得了与websockify的websocket telnet仿真器通信的TCP服务器。如下所示:
ncat -l 2000 -k -c 'xargs -n1 echo echoServer received'websockify 2023 :2000git 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方法。屏幕应该用echoServer received: <YOUR_MESSAGE>进行回复。万岁!
https://stackoverflow.com/questions/42798652
复制相似问题