我正在做一个项目
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但没有回答这个问题。
我已经被困了很长一段时间了。我会非常感谢你的帮助。