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