3

我正在做一个项目

1.这需要几个进程来监听唯一端口上的请求(可能在多个主机上)

2.每个流程都是为了服务一个独特的客户

3.客户端应使用client_id.domainname.com作为标识符/端点连接到相应的服务器进程。

例如:请求到达

client_id_1.domainname.com:FIXED_PORT should go to host_1:port_1
client_id_2.domainname.com:FIXED_PORT should go to host_2:port_2    
etc..
[Edited for clarification : the port number with which client will access should be fixed.Only the client_id would change with change in client]

4.[已编辑(错过了这一点)]。映射需要是动态的/可修改的。例如,如果一个进程死亡,另一个必须启动,它可能不在同一个端口上

我尝试了以下方法(使用java)

1.实现了tcp服务器,并尝试使用http://code.google.com/p/portforward/和我通过搜索找到的其他类似东西使用tcp端口转发。问题是这使用了没有请求uri的InetAddress(使用来自 uri 的子域获取客户端 ID)

2.在嵌入式码头中将服务器进程实现为Servlet。这仅适用于GET请求。GET 请求可以使用重定向到特定服务器

httpServletResonse.sendRedirect("http://host_1:port_1")

对于 POST,我们有 RequestDispatcher,它最终会导致 GET。似乎 HTTP 规范不允许使用 POST 进行重定向。

我还发现这个Calling the doPost in another Webapp with a Req Dispatcher forward建议以编程方式自己触发 POST 请求。(我还没有研究过这种方法)

我希望有一个解决方案。我可能过于简单化了,但我认为这与 HEROKU 所做的类似。它们也有在不同端口上运行的后端进程(dynos)(我不确定)。它们与基于应用程序的传入请求匹配-名称。以下讨论 http://www.quora.com/Scalability/How-does-Heroku-work但没有回答这个问题。

我已经被困了很长一段时间了。我会非常感谢你的帮助。

4

1 回答 1

0

这在 Heroku 堆栈上是不可能的,因为它只支持标准的 HTTP 和 HTTPS 端口(80 和 443)。当您启动进程时,连接服务的端口由 Heroku 基础设施决定(参见$PORT 和 Procfiles)。

在他们支持更多端口之前,尝试做任何不适合此模型的事情都不会真正奏效。

于 2011-12-30T19:38:53.047 回答