一些关于菜鸟的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上获得那么多运气。这是我到目前为止所尝试的:
telnet localhost 2000
。 回复:./telsocket -url ws://127.0.0.1:2023
errrr dial tcp 127.0.0.1:2023: connection refused
会返回 wssh -l localhost:2023
。显然NameError: name 'PROTOCOL_SSLv3' is not defined
存在一些问题(看起来并没有那么深入)。gevent
的repo中测试了几个示例,例如wstelnet或tests中的示例。所有人都给我一个代码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
答案 0 :(得分:2)
最后,我让TCP echo服务器通过 websockify 的代理与 websockify 的websocket telnet emulator进行通信。这是如何:
ncat -l 2000 -k -c 'xargs -n1 echo echoServer received'
websockify 2023 :2000
克隆回购邮件:git clone https://github.com/novnc/websockify.git
,并对wstelnet.js进行以下更改:
3.1将行ws.open(uri)
更改为ws.open(uri, "binary")
,以便克服代码400 问题。
3.2(这是固定链接),在初始var
语句后添加以下行:arr = Array.from(arr);
这是转换为数组因为 Uint8Array 显然不支持shift
方法。
使用firefox打开wstelnet.html,选择主机:localhost,端口: 2023,不加密,按连接并输入黑场。
屏幕应以echoServer received: <YOUR_MESSAGE>
回复。 hurray!