当前位置: 首页 > 知识库问答 >
问题:

Jetty-具有动态注册的代理服务器

孟泽宇
2023-03-14

我们有许多Jetty超文本传输协议服务器,都位于不同的防火墙后面。超文本传输协议服务器位于客户站点(不受我们的控制)。在这些站点的防火墙中打开端口不是一个选项。目前,这些服务器仅提供JSON文档以响应REST请求。

我们有Web客户端需要根据URL参数或标头值与给定的超文本传输协议服务器交互。

这似乎是一种简单的代理服务器情况——除了防火墙。

我目前正在尝试的方法是:

有一个集中式代理服务器(也基于Jetty),用于侦听来自远程http服务器的入站注册请求。注册请求将采用Websocket连接的形式,只要远程HTTP服务器可用,该连接就会保持活动状态。注册时,代理服务器将捕获websocket连接并将其映射到资源标识符。

web客户端将连接代理服务器,并在URL或标头中包含资源标识符。

代理服务器将确定要使用的适当Websocket,然后将请求传递给HTTP服务器。因此,请求和响应将通过Websocket传递。收到响应后,它将返回给web客户端。

所以理论上这一切都很好——我想弄清楚的是:

a)有没有更好的方法来实现这一点?

b)设置Jetty以在管道的HTTP服务器端进行代理的最佳方法是什么?

我想我可以使用Jetty的HttpClient,但我真正想做的是从websocket中提取HTTP字节,并通过管道将它们直接导入Jetty连接器。把一切都解析出来似乎没有意义。我想我可以在localhost上打开一个常规的套接字连接,从websocket中获取字节,然后这样做——但这样通过操作系统进行路由似乎很愚蠢(我已经在HTTP服务器的Jetty环境中运行了)。

看起来这确实是一个可能已经解决的问题。。。也许可以使用在WebSockets上工作的自定义jetty连接,而不是TCP/IP套接字?

更新:当我一直在玩这个的时候,似乎另一个棘手的问题是如何处理请求/响应行为(并且理想情况下支持webocket通道上的互斥)。我发现的一个潜在资源是webockets的WAMP子协议:http://wamp.ws/

共有1个答案

袁羽
2023-03-14

如果其他人正在寻找这个问题的答案-RESTEasy有一个模拟框架,可用于调用REST功能,而无需运行完整的servlet容器:http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html_single/index.html#RESTEasy_Server-side_Mock_Framework

这与WAMP相结合,似乎能做到我正在寻找的。

 类似资料:
  • 在进行服务拆分之后,服务的数量会变得非常多,而每个服务又可能会有非常多的集群节点来提供服务,那么为保障系统的正常运行,必然需要有一个中心化的组件完成对各个服务的整合,即将分散于各处的服务进行汇总,汇总的信息可以是提供服务的组件名称、地址、数量等,每个组件拥有一个监听设备,当本组件内的某个服务的状态变化时报告至中心化的组件进行状态的更新。服务的调用方在请求某项服务时首先到中心化组件获取可提供该项服务

  • 我已经嵌入了在7000端口上运行的Jetty。另外,我有一个keycloak服务器运行在同一台机器的端口8100上。 我的所有客户端访问都通过Jetty进行,即localhost:7000。因此,我将keycloak作为Jetty上的反向代理,即localhost:7000/keycloak/auth将重定向到localhost:8100/auth。它击中正确。 现在,有KeycloakInsta

  • 我正在使用Spring Boot注册服务器(Eureka服务器)。目前它正在使用以下配置。 项目名称:注册服务 内部主要方式:系统。setProperty(“spring.config.name”、“注册服务”); "yml file": 文件名:注册-服务内容: 通过以上配置,应用程序开始在2323上运行。但如果我换了Spring。配置。名称,它不工作,开始给连接拒绝异常。 > 为什么会这样?即

  • 本文向大家介绍Oracle Listener 动态注册 与 静态注册,包括了Oracle Listener 动态注册 与 静态注册的使用技巧和注意事项,需要的朋友参考一下 一.什么是注册 注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。   在数据库服务器启动过程中,

  • 注册服务 Frontier带有一些非常基本的基础层服务,也包括了大部分的注册商(registrar)。注册商由3个部分组成。 GlobalRegistrar将名称(字符串)关联到帐户(地址)。 HashReg将散列关联到哈希(将任何对象映射到“内容”哈希)。 UrlHint将内容哈希值关联到提示内容的位置。只有在内容存储不是内容寻址的情况下才需要,否则内容哈希已经是内容地址。如果使用它,则从URL

  • 问题内容: 我想在Java程序中定义一个方法拦截器,换句话说,我希望有一个在每次方法调用时执行的行为。该应用程序未在应用程序服务器中执行,因此无法在调用拦截器周围使用EJB。我在标准Java库中找到了一个不错的Proxy API,但由于它在代理创建过程中需要一个接口,因此它的功能有限: 是否有类似的API不会强制将Foo.class声明为接口? 问题答案: 为什么不使用CGLIB?有关更多信息,请