我正在尝试在NodeJS中构建一个新的Web应用程序。此Web应用程序使用两个主要组件。
1)我在NodeJS中编写的代码 - 我自己的逻辑流程。
2)第三方开源NodeJS应用程序 - EtherCalc - 同时使用HTTP& Socket.io
EtherCalc本身就是一个完全独立的Web应用程序。它是一个电子表格在浏览器+服务器,旨在用作独立的应用程序。重要的是,它有自己的命名空间(因为它具有路由到不同功能的各种路径名)。
我的应用程序和EtherCalc各自独立运行在自己的端口上。
为简单起见,请让域名为localhost
。
我的应用程序将使用EtherCalc的电子表格功能,以及我自己代码的非电子表格相关逻辑流程。用户可以访问这两个界面。但是,我希望这一切看起来都来自一个URL /端口 - 我不希望非程序员指定不同的端口来访问不同的功能。
解决这个问题的最简单方法是在我的应用程序中为EtherCalc创建一个名称空间。以/ethercalc/
开头的任何路径都会自动转发到运行EtherCalc的端口(在转发之前将ethercalc/
从请求URL中删除)。任何不以此为开头的东西都在标准服务器逻辑流程中。
我正在使用node-http-proxy
来实现此目的,使用以下代码:
proxy.proxyRequest(req,res,{
host:'localhost',
port:8000
});
这似乎最初功能正常 - 当我转到任何/ethercalc/
网址时,电子表格界面会加载。但是,EtherCalc使用WebSockets或JSON轮询来保持服务器和服务器的安全。浏览器在同一页面上。这似乎不正常。出于某种原因,实际获得该连接需要10秒钟。如果我在电子表格上工作,然后再加载它就会出现问题 - 在实际看到我事先输入的数据之前,还有10秒钟的窗口。
遇到此问题后,删除了更改网址的功能。现在我的应用程序只是将请求转发到运行的EtherCalc端口。但问题仍然存在。直接连接到EtherCalc所在的端口可以解决问题。
重写代码以使用node-http-proxy的httpProxy.createServer()
代码也没有任何区别 - 相同的结果......
当连接到我的应用程序端口(具有代理/转发系统的端口)时,奇怪的是,在漫长的等待期之后,它运行正常 - 所有内容都实时完全同步。
有人知道这是怎么回事吗?
node-http-proxy
)以实现此目的。任何线索/提示/建议/线索? Socket.IO对我来说是全新的 - 我已经使用Node很长一段时间了(2年),但它完全是在HTTP世界中。代理对我来说也是新的(这是我第一次使用它 - 将它用于命名空间/端口问题)。因此,我真的不知道从哪里开始寻找。