Take a look at the various proxy options? I have also implemented a mux with netty in the USaBUSe code here:
https://github.com/sensepost/USaBUSe/tree/master/HIDProxy Perhaps it will give you some ideas. Also look at ./src/main/java/io/netty/example/securechat/SecureChatServerHandler.java, as it contains an example of distributing messages between a number of channels. Rogan On Tue, Apr 18, 2017 at 10:48 AM u6f6o <[email protected]> wrote: > Hi, > > I am currently working on a little service that listens to a streaming > service, transforms the messages to some other format, applies some > business logic and distributes the results among a bunch of connected > websocket clients. > > So far I created two netty Bootstraps, one that listens to the streaming > service for incoming messages and one that handles the connected websocket > clients: > > public class TickSource { > > private static final byte FS = 28; > > public void run() throws Exception { > String host = "localhost"; > int port = 20077; > > EventLoopGroup workerGroup = new NioEventLoopGroup(); > > try { > Bootstrap b = new Bootstrap(); > b.group(workerGroup); > b.channel(NioSocketChannel.class); > b.option(ChannelOption.SO_KEEPALIVE, true); > b.handler(new ChannelInitializer<SocketChannel>() { > @Override > public void initChannel(SocketChannel ch) throws Exception { > ch.pipeline().addLast(new > DelimiterBasedFrameDecoder(81920, Unpooled.wrappedBuffer(new byte[]{FS}))); > ch.pipeline().addLast(new TickSourceHandler()); > } > }); > ChannelFuture f = b.connect(host, port).sync(); > f.channel().closeFuture().sync(); > } finally { > workerGroup.shutdownGracefully(); > } > } > } > > and > > public class TickDistributor { > > public void run() throws Exception { > EventLoopGroup bossGroup = new NioEventLoopGroup(); > EventLoopGroup workerGroup = new NioEventLoopGroup(); > try { > final ServerBootstrap sb = new ServerBootstrap(); > sb.group(bossGroup, workerGroup) > .channel(NioServerSocketChannel.class) > .childHandler(new ChannelInitializer<SocketChannel>() { > @Override > public void initChannel(final SocketChannel ch) > throws Exception { > ch.pipeline().addLast( > new HttpRequestDecoder(), > new HttpObjectAggregator(65536), > new HttpResponseEncoder(), > new > WebSocketServerProtocolHandler("/ticks"), > new TickDistributorHandler() > ); > } > } > ); > Channel ch = sb.bind(8080).sync().channel(); > ch.closeFuture().sync(); > } finally { > bossGroup.shutdownGracefully(); > workerGroup.shutdownGracefully(); > } > } > } > > > So each component on its own works nicely. The problem is, I don't have a > clue how to connect them both in a nice netty-way. I thought about storing > the the ServerChannels in the TickSourceHandler and write a message > received from the streaming service to each of them individually, not sure > though, if this is achievable in that way or if there is a nicer way to do > it with netty mechanics. > > Reading through *Netty In Action* I also read about LocalChannels and > bootstrapping new client connections in the same EventLoop if you have a > 1->1 relation, but I guess it's not suitable in my case with a relation of > 1->n? > > I'd be happy about any hint! > > Thx, > u6f6o > > -- > You received this message because you are subscribed to the Google Groups > "Netty discussions" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/netty/4cad9bbf-52b6-4b0f-8705-d57902453c07%40googlegroups.com > <https://groups.google.com/d/msgid/netty/4cad9bbf-52b6-4b0f-8705-d57902453c07%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Netty discussions" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/netty/CAOYdKdgY229WueaiqGAOMAVzyWzQrb%3DZ8OJGUrsfAj7mBcJtxQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
