NodeJS + HTML5 + Telnet = 是否可能?

3
我正在进行一个课程项目,需要Web浏览器客户端来连接不在标准端口的Telnet服务器,并具有选择端口和连接的功能。我已经拥有了安装Telnet服务器的机器,等待连接。
因此,我的想法是在专用计算机上设置一个带有Express服务器的NodeJS服务器。这将通过Telnet处理连接并为客户端托管一个页面,客户端将使用socket.io与服务器端交换信息。
但是,作为一个新手(电信学生)我不确定这是否可行。我发现像Peter Nitsch的jsterm.com这样的东西,但是我看到代码中存在一些重大差距,演示也不太有效,所以我不知道它是否实际可行。有人尝试过吗?
我的另一个问题是:当我通过Websockets向NodeJS服务器发送信息时,对于我来说似乎很容易,那么我该如何处理这些信息?我只是设置另一个WebSocket来直接将从客户端WebSocket获得的相同数据传递到Telnet端口吗?
Socket能否直接连接到特定端口,而无需在另一侧等待WebSocket?如果我的想法是错误的,有人能帮我吗?也许存在某些好的解决方案 - 我想到了Anyterm,但我看到它需要一个Apache服务器并且运行完全不同的技术...

是的,这是可行的。数据流程是,当浏览器中的终端仿真器请求时,节点服务器必须建立与 Telnet 服务器的连接,然后通过 Web 套接字代理数据来回传输。 - Dan D.
为什么是-1?至少发表一条评论说明你为什么要点踩。+1 - Gabriel Llamas
因此,通过WebSocket将消息发送到回调函数中的Telnet端口是可行的。每次WebSocket从客户端接收到消息时,该回调函数都会运行。服务器从客户端获取消息,通过WebSocket传递到Telnet端口 - 这是我目前的想法 :) 我将尝试运行一些测试,但我已经看到我将需要像Websockify这样的东西来从我的消息中剪切不相关的数据,以便有一个清晰的二进制消息,可以被我的Telnet服务器理解... - Bartłomiej Kowalczyk
1个回答

4
为了明确,WebSocket连接不是原始的TCP套接字连接。每个数据包中都有额外的头信息,浏览器到服务器的数据使用运行XOR进行掩码等。
为了使浏览器与普通TCP服务器(例如telnet服务器)通信,您需要某种桥接服务。恰巧已经存在这样一种服务。websockify是一个服务器,它接受WebSocket连接并将它们桥接到原始TCP服务器。
实际上,websockify项目已经包括一个工作的telnet客户端作为示例应用程序。但是,请注意,websockify的一个限制(出于安全原因)是客户端不能选择任意服务器地址/端口进行连接。目标地址必须预先定义,可以作为websockify命令行中指定的单个目标,也可以作为配置文件中指定的多个目标(并通过WebSocket连接字符串中的令牌进行选择)。
在不同语言中有多个websockify的实现(python,C,node,ruby,Clojure),然而,只有python版本当前支持通过配置文件进行多个目标的设置。

免责声明: 我创建了websockify


是的,您的项目看起来像是一个甜蜜的软件解决方案。不幸的是,在我的应用程序中,客户端必须能够自行决定要从设备使用的端口列表中选择哪个端口。例如,是否可以创建一个Websocks数组,将nodeJS服务器连接到不同(可能是预定义的)telnet端口,具体取决于客户端应用程序在简单的Web GUI中选择的端口?如果可能的话,我已经有了完整的设置...我只是决定坚持使用js,并使它尽可能简单。无论如何,感谢您的努力,很酷您不会忽视新手 :) - Bartłomiej Kowalczyk
我找到了另外一种方法:每当新客户端通过websocket连接到节点时,节点会在命令行中设置一个子进程“telnet地址端口”作为子进程。由于几乎每个操作系统都有一个telnet客户端,为什么不使用它呢?对我来说一切都很好。只有一个坏处——我猜Windows不知道标准输入和输出是什么,所以我不能在那里使用child_process(但在Ubuntu 12.04上可以正常工作)。无论如何,最后一件事情就是创建一个漂亮的基于网站的终端,然后代码就可以发布到Github上了。 - Bartłomiej Kowalczyk
@kanaka - 这是你所指的示例吗? https://github.com/novnc/websockify/tree/72ce5c1ae8abbcd3f8bb5f4e93915f61a1047704/include - StingyJack
@StingyJack 是的。多年来没有人碰过那个例子,所以它现在可能已经失效了,但是它曾经是可以工作的,因此它应该是一个合理的起点。 - kanaka
@kanaka - 没问题,我只是想确认我看的是正确的东西。 - StingyJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接