将2台Netty服务器合并为一台

将2台Netty服务器合并为一台,netty,Netty,我有一个Netty服务器(基本上取自Netty示例ObjectEchoServer),它运行在OSGi插件中。服务器绑定到端口51515,并且正以其应有的方式工作。到目前为止,我了解基本概念 现在我也需要在我的插件中添加某种“嵌入式Http”服务器。我已经从Netty示例中删除了HTTPServer,并对其进行了修改,以满足我的需要。服务器绑定到一个单独的端口51516 我需要一些帮助,把两台服务器连接起来。这两个服务器只在处理程序上有所不同 ObjectEcho extends SimpleC

我有一个Netty服务器(基本上取自Netty示例ObjectEchoServer),它运行在OSGi插件中。服务器绑定到端口51515,并且正以其应有的方式工作。到目前为止,我了解基本概念

现在我也需要在我的插件中添加某种“嵌入式Http”服务器。我已经从Netty示例中删除了HTTPServer,并对其进行了修改,以满足我的需要。服务器绑定到一个单独的端口51516

我需要一些帮助,把两台服务器连接起来。这两个服务器只在处理程序上有所不同

ObjectEcho

extends SimpleChannelInboundHandler<Object> 
扩展SimpleChannelInboundHandler
而HTTPServer

extends SimpleChannelInboundHandler<FullHttpRequest>
扩展SimpleChannelInboundHandler
是否可能只有一个处理程序可用于两台服务器


我想要实现的是两台服务器只使用一个端口

如果您仍然有两个不同的端口,您可以通过Java heritage构建自己的“业务”处理程序,然后首先添加协议处理程序(echo处理程序和http处理程序),然后添加自己的业务处理程序

当然,一切都取决于传递给这个业务处理程序的可能对象,因为无论echo或http处理程序第一次做什么,它都必须是相同的

顺便说一句,将“协议”和“业务”处理程序分开是一个很好的实践

更新响应:


在您的管道中,对于两台服务器(2个端口),首先使用扩展名
ChannelDuplexHandler
而不是
SimpleChannelBoundHandler
,添加“协议”驱动程序,然后添加您自己的业务处理程序(基于
SimpleChannelBoundHandler

从协议业务中,根据需要将对象转发到入站业务处理程序,并将对象返回到
ChannelDuplexHandler
转换回协议

这样,您就可以将协议(编解码器)和业务分开

即使这不是您想要的,您也可以看看example/src/main/java/io/netty/example/spdy/client,它展示了如何实现这一点(客户端,但服务器端的原理完全相同)

第二次更新:

如果只有一个端口,则更为复杂,因为您需要使用以前的
ChannelDuplexHandler
,该处理程序将分析第一个字节以确定正确的协议类型。然后,您可以动态地将必要的处理程序(协议和业务)添加到管道中

因此,首先,管道中只有一个处理程序,即决定必须使用哪个协议的处理程序


但请注意,这可能很困难。除非在确保协议的第一个字节中有明确的差异,否则可能没有真正的解决方案,除非有两个端口,因为程序必须是确定性的

对于echo,所有对象都是POJO,包含EchoHandler用于触发服务器上请求的字符串。服务器发回字符串。HTTP部分收到HTTPRequest并返回一个从日志(文本文件)生成的HTML页面。您可以发布一些伪代码吗。这将使我更好地理解在您的管道中,对于两个服务器(2个端口),首先添加“协议”驱动程序),目标是只有一个端口。