【发布时间】:2017-08-05 12:52:13
【问题描述】:
一些针对菜鸟的 webdev 基本问题。
背景:我有一个使用 websocket 协议的 javascript 客户端和一个很好的旧 java 服务器,我完全可以通过 telnet 与之交互.我希望他们能够在本地相互通信(传递字符串就足够了)。
为此,我绝对不想在客户端中进行深度更改。在此之前,我尝试按照this 指南使服务器适应websocket,甚至通过了握手,但它变得非常混乱。
所以在这一点上,我认为处理这个问题的最佳方法是通过 TCP->WebSocket 代理(如websockify)提供服务。如果我得到explanation 正确,它将“包装”服务器的进程,在新端口中打开“升级”连接。 websocket 客户端应该能够通过该端口直接与服务器通信。但我一直在尝试用不同的方法来实现这一点,但没有成功,因此我的问题:
- 有没有更好的方法来处理这个问题? (这可以解释谷歌的稀疏性,我可以想象这种情况经常发生!)
- 如果“包装”是最好的方法并且我做对了,如何实施?
实现 - 编辑:为了测试,我尝试构建一个简单的回显服务器:
我正在运行this 帖子中建议的非常简单的命令行回显服务器:
ncat -l 2000 -k -c xargs -n1 echo。通过telnet localhost 2000与其交谈会返回所需的回声。到目前为止一切顺利。我使用
apt-get安装了websockify,运行如下:websockify 2023: 2000,这应该通过端口2023上的websocket连接打开同一个服务器。-
此时我仍然可以通过
telnet localhost 2000进行通信,但我在 2023 端口上没有那么幸运。这是我迄今为止尝试过的:- 下载了telsocket 二进制文件,并调用了
./telsocket -url ws://127.0.0.1:2023。 回复:errrr dial tcp 127.0.0.1:2023: connection refused - 克隆了wssh(websocket 的命令行shell),看起来很有希望。我能够安装它,但运行
wssh -l localhost:2023返回NameError: name 'PROTOCOL_SSLv3' is not defined。显然gevent存在一些问题(没有进一步研究)。 - 测试了
websockify的repo 中的几个示例,例如wstelnet,或tests 中的示例。他们都给了我一个代码 400,消息选择了无效协议。
- 下载了telsocket 二进制文件,并调用了
后续 - 已编辑:深入研究 websock.js 和 wstelnet.js files,通过向 JS 控制台发出以下命令,我能够获得更具体的结果: p>
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
【问题讨论】:
标签: javascript websocket websockify