...
Potential approaches to this are:
- GridNioServer
- Pros: no dependencies, relatively easy supports SSL
- provides Future-based API
- No extra dependencies
- Supports multiplexing (shared worker thread group across multiple connections)
- Cons:
- Possibly not future proof
?- - Ignite 3.0 may change how GridNioServer works and/or switch to Netty
- Netty
- Pros:
- Easy to use, provides Future-based API
- Supports multiplexing (shared worker thread group (EventLoopGroup) across multiple connections)
- Proven performance
- Cons:
- New dependency in core module
- Perform writes in a separate thread (use dedicated thread or ForkJoinPool.commonPool)
- Pros: no
- Cons: more
- Increased resource usage,
- More manual thread management - hard to get right and fast
- AsynchronousSocketChannel
- Pros:
- Native Java API, no dependencies
- Cons:
Netty - Pros:
- Greatly reduces complexity - returns ChannelFuture, which can be easily converted to IgniteClientFuture. Manual thread management goes away.
- We can share one EventLoopGroop across all TcpClientChannel instances within ReliableChannel and reduce resource usage when partition awareness is enabled
- Proven performance
Cons:New dependency in core module
As a result of dev list discussions (see links below), it is decided to use GridNioServer.
Discussion Links
Dev List:
...