Your Thread doesn't really appear to be doing anything, other than waiting 
for the closeFuture() to sync(), and then exits. That serves no purpose at 
all, that I can see.

Your two bootstraps are also not "related" to each other. i.e. they are not 
connected to each other or communicating with each other in any way.

If you take a look at the various *Proxy* examples in the netty tree, you 
will see that after a connection is received, an Initializer is used to set 
up the various handlers on the pipeline. Most typically, one of the 
handlers will construct the client Bootstrap, establish the outbound 
connection, store a reference to the Channel somewhere (possibly by passing 
it as a constructor parameter of another handler), and then remove itself 
from the pipeline, so that additional outbound connections are not made.

I hope this helps.

Rogan

On Tuesday, April 18, 2017 at 2:53:17 PM UTC+2, u6f6o wrote:
>
> Thx for the hint! I got a first prototype ready (code can be found below). 
> I am a bit unsure about some one aspects though: Both the Bootstrap and 
> ServerBootstrap work on the same worker group. Is it okay doing it like 
> this or would it make more sense to let the client have its own worker 
> group? 
>
> In case any no-go can be found in my code (expect the separate thread to 
> wait on closeFuture), I'd be happy about hints/comments. 
>
> public class StreamingServer {
>
>     private static final int PORT = 
> Integer.parseInt(System.getProperty("port", "8992"));
>     private static final byte FS = 28;
>
>     public static void main(String[] args) throws Exception {
>         SelfSignedCertificate ssc = new SelfSignedCertificate();
>         SslContext sslCtx = SslContextBuilder.forServer(
>                 ssc.certificate(),
>                 ssc.privateKey()
>         ).build();
>
>         ChannelGroup connectedClients = new 
> DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
>
>         EventLoopGroup bossGroup = new NioEventLoopGroup(1);
>         EventLoopGroup workerGroup = new NioEventLoopGroup();
>
>         String host = "localhost";
>         int port = 20077;
>
>         try {
>             Bootstrap source = new Bootstrap();
>             source.group(workerGroup);
>             source.channel(NioSocketChannel.class);
>             source.option(ChannelOption.SO_KEEPALIVE, true);
>             source.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(connectedClients));
>                 }
>             });
>             ChannelFuture f = source.connect(host, port).sync();
>             new Thread(){
>                 @Override
>                 public void run() {
>                     try {
>                         f.channel().closeFuture().sync();
>                     } catch (InterruptedException e) {
>                         e.printStackTrace();
>                     }
>                 }
>             }.start();
>             
>             ServerBootstrap server = new ServerBootstrap();
>             server.group(bossGroup, workerGroup)
>                     .channel(NioServerSocketChannel.class)
>                     .handler(new LoggingHandler(LogLevel.INFO))
>                     .childHandler(new StreamingServerInitializer(
>                             sslCtx,
>                             connectedClients));
>
>             server.bind(PORT).sync().channel().closeFuture().sync();
>         } finally {
>             bossGroup.shutdownGracefully();
>             workerGroup.shutdownGracefully();
>         }
>     }
> }
>
>
> Am Dienstag, 18. April 2017 11:11:24 UTC+2 schrieb Rogan Dawes:
>>
>> 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/accdfc10-f43b-46c1-a182-0cd66b70dec7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to