I am trying to use HTTP Core NIO module to build highly scalable HTTP clients 
that do not directly use sockets to connect to peer HTTP servers. The network 
topology involves a tunnel and hence not amenable to a direct socket to the 
peer.

[ Users <==> HttpClients <==> Tunnel(s) ] <==> [ Peer HttpServers ]

My first thought was to simply use an instance of pair of 
java.nio.channels.Pipe pipeIn, pipeOut and use these pipes to hook up with my 
tunnel IO module. For outcoming (w.r.t. HttpClient) pipeOut.sink channel will 
enable HttpClient to write data to my tunnel and pipeIn.source will enable 
HttpClient to read data from my tunnel. Tunnel module in conjunction with Users 
interaction would be responsible for channel setup and teardown. Note that 
Channel setup and teardown entails special tunnelling protocol events and hence 
cannot be straight Selector event driven like current implementation in 
DefaultConnectingIOReactor.

The current implementation of HTTP Core expects a SocketChannel and hence it 
does not seem feasible to directly hook up any other types of channels. Do you 
recommend an integration strategy that would be inline with future direction?

BaseIOReactor is being created by DefaultConnectingIOReactor and expects a 
ChannelEntry that requires a SocketChannel. Instead an abstract ChannelEntry 
that would assume channel is any nio channel could be used. This would however 
require current code that expects channel to be a socket - e.g. setting socket 
preferences can check if it is indeed a SocketChannel. I am not sure how 
pervasive is such a change and if there is a better idea that can prevent such 
change.

-V.B.



      

Reply via email to