代理WebSockets&使用带有nodeJS的自定义路径到单独的NodeJS应用程序的HTTP?

时间:2013-05-23 03:58:36

标签: node.js proxy socket.io etherpad node-http-proxy

CONTEXT

我正在尝试在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()代码也没有任何区别 - 相同的结果......

当连接到我的应用程序端口(具有代理/转发系统的端口)时,奇怪的是,在漫长的等待期之后,它运行正常 - 所有内容都实时完全同步。

有人知道这是怎么回事吗?

TL; DR

  1. 我在NodeJS中有一个面向HTTP端口80的Web应用程序。
  2. 我在NodeJS中使用Socket.IO(EtherCalc)在非公共端口上的同一台服务器上运行第三方Web应用程序。
  3. 我想从我自己的网络应用程序和从EtherCalc的网页到端口80上的相同域名提供网页。
  4. 我在我的网络应用程序上运行了代理(node-http-proxy)以实现此目的。
  5. 出于某种原因,当我这样做时,浏览器和服务器之间为EtherCalc(现在通过代理运行)发生的握手需要FOREVER。 (或者更确切地说,10秒,AKA对于面向消费者的网页来说是不可接受的)
  6. 我不知道为什么会这样。
  7. 任何线索/提示/建议/线索? Socket.IO对我来说是全新的 - 我已经使用Node很长一段时间了(2年),但它完全是在HTTP世界中。代理对我来说也是新的(这是我第一次使用它 - 将它用于命名空间/端口问题)。因此,我真的不知道从哪里开始寻找。

0 个答案:

没有答案