一些针对菜鸟的 webdev 基本问题。
背景:我有一个使用websocket协议的 javascript 客户端和一个很好的旧 java 服务器,我完全可以通过telnet
. 我希望他们能够在本地相互通信(传递字符串就足够了)。
为此,我绝对不想对客户端进行深度更改。在此之前,我尝试按照本指南使服务器适应websocket,甚至通过了握手,但它变得非常混乱。
所以在这一点上,我相信处理这个问题的最好方法是通过像websockify这样的 TCP->WebSocket 代理来提供服务。如果我的解释正确,它将“包装”服务器的进程,在新端口中打开“升级”连接。并且websocket客户端应该能够通过该端口直接与服务器通信。但是我一直在尝试用不同的方法来实现这一点,但没有成功,因此我的问题是:
- 有没有更好的方法来处理这个问题?(这可以解释谷歌的稀疏性,我可以想象这种情况经常发生!)
- 如果“包装”是最好的方法并且我做对了,那么如何实施呢?
实施 - 编辑:为了测试,我尝试构建一个简单的回显服务器:
我正在运行这篇文章中建议的非常简单的命令行回显服务器:
ncat -l 2000 -k -c xargs -n1 echo
. 通过与它交谈会telnet localhost 2000
返回所需的回声。到目前为止,一切都很好。我使用安装了websockify
apt-get
,并按如下方式运行它: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
测试了's repo中的几个示例,例如wstelnet或tests中的示例。他们都给了我一个代码 400,消息 Invalid protocol selected。
- 下载telsocket二进制文件,并调用
后续编辑:深入研究 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??
因此,如您所见,我能够建立连接,但仍然没有得到回声。错误也可能出现在服务器端,因为我尝试的每个工具都失败了。帮助!丁:
备注:由于它是为了在本地工作,我不在乎有ws
or wss
。只要可行且有效,我也没有首选的方法来执行此操作。如果它是相关的,我在 Ubuntu15.10 + Firefox47.0