鉴于标准的Node.js HTTP库或现有的REST客户端库,允许这样的库在我自己的协议之上执行这些HTTP请求的最可行方法是什么?
换句话说:我的目标是提供一个看起来的模块,就像HTTP客户端一样。它接受HTTP请求标头,并返回HTTP响应。我应该考虑哪些选项来调整现有的REST库以使用我的'伪' HTTP客户端模块,而不是标准的节点库HTTP客户端?
更多背景信息
我希望创建一个服务器应用程序(基于Node.js),它向远程嵌入式设备发出HTTP REST请求。但是,由于NAT,应用程序服务器无法直接与远程设备建立客户端TCP连接。因此,为了绕过NAT,我将设计自己的专有协议,该协议涉及远程设备启动与应用服务器的持久连接。然后,一旦建立了持久连接,Node.js应用程序就能够通过与网络设备的持久连接返回HTTP请求。
因此,我的目标是创建一个Node.js模块,作为一个桥接器。来自联网设备的传入套接字连接和发出REST请求的主应用程序之间的层。目标是应用程序将使REST请求好像是向服务器发出HTTP客户端请求,而实际上HTTP请求和响应是在专有协议之上传送的。
我目前正在考虑的一个选项是我的桥梁'模块实现一个模仿http.request(options,[callback])
的接口,并以某种方式强制REST客户端库使用此接口而不是Node HTTP客户端。据说至少我不得不轻易修改我用来实现这一点的REST客户端库。
如上所述,我实际上是尝试使用中间服务器创建自己的NAT遍历形式。中间服务器将向用户提供前端UI,并向嵌入式联网设备发出后端数据请求。嵌入式设备和应用程序服务器之间的连接将是持久的,并从嵌入式设备启动,以避免通常的NAT问题(即配置端口转发的要求)。
虽然我之前提到过,我通过原始套接字连接使用我自己的协议实现了设备到服务器的连接,但我现在正在尝试的机制是使用普通的HTTP和long -轮询。嵌入式设备启动与应用程序服务器的HTTP连接,并且当服务器有要发送的内容时,延迟响应用于将数据传送回设备。然后我会隧道' HTTP请求在此顶部以相反的方向发送。
因此,简单来说,我的桥梁' layer是从两端向内部接受HTTP连接的东西(外部设备连接和Web应用程序内部REST请求)。通过使用长轮询,它将有效地传达连接客户端之间的请求和响应。
答案 0 :(得分:1)
不是替换http层,而是创建一个中间人。在节点中创建一个http服务器,该服务器是所有其余请求的目标。然后,它将请求转移到专有协议,并通过转换回休息来处理响应。
这样您就不必破解其余代码,甚至可以根据需要将其换成另一个库。