我们有许多Jetty http(s)服务器,都在不同的防火墙后面 . http服务器位于客户站点(不受我们控制) . 在这些站点的防火墙中打开端口不是一种选择 . 目前,这些服务器仅提供JSON文档以响应REST请求 .
我们的Web客户端需要根据URL参数或标头值与给定的http服务器进行交互 .
这似乎是一个简单的代理服务器情况 - 除了防火墙 .
我目前正在尝试的方法是:
拥有一个集中式代理服务器(也基于Jetty),用于侦听来自远程http服务器的入站注册请求 . 注册请求将采用Websocket连接的形式,只要远程HTTP服务器可用,它就会保持活动状态 . 注册时,Proxy Server将捕获websocket连接并将其映射到资源标识符 .
Web客户端将连接代理服务器,并在URL或标头中包含资源标识符 .
代理服务器将确定要使用的相应Websocket,然后将请求传递给HTTP服务器 . 因此请求和响应将通过Websocket传播 . 收到响应后,它将返回给Web客户端 .
所以这在理论上一切都很好 - 我想弄清楚的是:
a)有更好的方法来实现这一目标吗?
b)设置Jetty在管道的HTTP Server端进行代理的最佳方法是什么?
我想我可以使用Jetty 's HttpClient, but what I really want to do is just pull the HTTP bytes from the websocket and pipe them directly into the Jetty connector. It doesn'似乎有意义解析一切 . 我想我可以在localhost上打开一个常规套接字连接,从websocket中获取字节,并按照这种方式执行 - 但是通过操作系统这样的路径似乎很愚蠢(我已经在HTTP Server的Jetty环境中运行了) .
看起来这似乎是可能已经解决的那种问题......也许通过使用可在WebSockets而不是TCP / IP套接字上工作的自定义jetty连接?
更新:我发现've been playing with this, it seems like another tricky problem is how to handle request/response behavior (and ideally support muxing over the websocket channel). One potential resource that I'是websockets的WAMP子协议:http://wamp.ws/
1 回答
如果其他人正在寻找这个答案 - RESTEasy有一个模拟框架,可用于调用REST功能而无需运行完整的servlet容器:http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html_single/index.html#RESTEasy_Server-side_Mock_Framework
这与WAMP相结合,似乎正在寻找我正在寻找的东西 .