Please, can any developers guide me on extending Camel/Netty4 to support full
duplex (bidirectional) asynchronous network communication over the exact
same UDP/TCP port? I need to accomplish this task before XMas with your
generosity and guidance. The target component is Netty4 for both UDP and
TCP. If you know of any existing solution that solves this problem, please
share, as this issue has much discussion with no published solution. The
requirements cannot change because existing systems (non-Camel) are already
designed to perform asynchronous bidirectional sockets I/O over the single
established socket (and session for TCP).

Relevant Camel tickets are already documented here:
https://issues.apache.org/jira/browse/CAMEL-1075
https://issues.apache.org/jira/browse/CAMEL-2624


Consider the following "invalid" example that attempts to enable a full
duplex asynchronous Camel route between endpoint1 and endpoint2. It
important to notice that this design will cause camel to open 1 tcp session
for “from route1 endpoint1” and 1 tcp session for “to route2 endpoint1”
(i.e. socket bind collision). This violates the one asynchronous
bidirectional socket requirement. 

<endpoint id="endpoint1"
uri="netty4:tcp://localhost:7000?sync=false&amp;disconnect=false..." />
<endpoint id="endpoint2"
uri="netty4:tcp://localhost:7001?sync=false&amp;disconnect=false..." />
<route id="route1">
        <from ref="endpoint1" />
        <to ref="endpoint2" /> 
</route>
<route id="route2">
        <from ref="endpoint2" />
        <to ref="endpoint1" /> 
</route>

What is the easiest design to enable this requirement? I prefer to use the
design of an existing Camel developer, because I am new to Camel. Two
initial design options are presented below:

Option1 is to add optional seda: or direct: component to the NettyConsumer
class (if such a thing can be done). For example, endpoint1 and endpoint2
have a seda: component to enable a producer backchannel. 
<endpoint id="endpoint1"
uri="netty4:tcp://localhost:7000?seda=mySeda1&amp;sync=false&amp;disconnect=false..."
/>
<endpoint id="endpoint2"
uri="netty4:tcp://localhost:7001?seda=mySeda2&amp;sync=false&amp;disconnect=false..."
/>
<route id="route1">
        <from ref="endpoint1" />
        <to uri="seda:mySeda2" /> 
</route>
<route id="route2">
        <from ref="endpoint2" />
        <to uri="seda:mySeda1" />
</route>

Option2 is to add optional localhost server to the NettyConsumer class (if
such a thing can be done). For example, endpoint1 and endpoint2 have a
localhostServerPort to enable a producer backchannel.

<endpoint id="endpoint1"
uri="netty4:tcp://localhost:7000?localhostServerPort=8000&amp;sync=false&amp;disconnect=false..."
/>
<endpoint id="endpoint2"
uri="netty4:tcp://localhost:7001?localhostServerPort=8001&amp;sync=false&amp;disconnect=false..."
/>
<route id="route1">
        <from ref="endpoint1" />
        <to
uri="netty4:tcp://localhost:8001?clientMode=true&amp;disconnect=false&amp;sync=false..."
/> 
</route>
<route id="route2">
        <from ref="endpoint2" />
        <to
uri="netty4:tcp://localhost:8000?clientMode=true&amp;disconnect=false&amp;sync=false..."
/>
</route>

Does this make sense? I may be typing things that may not make
implementation sense, so please guide me in coming up with any practical
solution that will work in Camel. 








--
View this message in context: 
http://camel.465427.n5.nabble.com/Enable-camel-netty4-to-support-full-duplex-bidirectional-asynchronous-sockets-tp5774972.html
Sent from the Camel Development mailing list archive at Nabble.com.

Reply via email to