FrameDecoder for UDP stream
Ankush Bhatiya
ankushb at gmail.com
Thu May 6 16:14:17 EDT 2010
Hi,
In FrameDecoder, create a HashMap<Conversation, List<Conversation>>, also
TreeMap<TimeStamp, Conversation>. Create a thread in constructor which
timely check this treemap and remove all the timeout conversation from both
maps. Also when new conversation comes add this to hashmap and if End of
conversation is reached(I hope you have some delimiter for this) push this
conversation to your business logic. Isn't this work?
Ankush
On Thu, May 6, 2010 at 5:11 PM, Jan Van Besien <janvanbesien at gmail.com>wrote:
> Hi
>
> I am looking for ideas on how to implement something in netty.
>
> I am writing a netty client (and test/mock server) for a binary UDP
> protocol. The payload is protobuf and the transport layer is UDP. Each
> protobuf message is splitted over different UDP packets. Each UDP packet
> contains a header and a body. The body is a part of the protobuf
> message, the header contains a conversation number (identifies a single
> request-response conversation), a packet number and a total number of
> packets (total meaning the total to get the whole protobuf payload) and
> a length field describing how long the body is.
>
> Downstream it looks like this (I think this is OK):
> - my business logic handler creates protobuf messages
> - a protobuf encoder encodes the message in binary format
> - a custom OneToOneEncoder creates a ChunkedInput which creates the UDP
> packets as described above
> - a chunkedWriteHandler writes the chunks
>
> I currently designed the upstream pipeline like this:
>
> - (1) a lengthfieldbasedframedecoder to cope with potentially fragmented
> UDP packets
> - (2) something which assembles multiple "chunked" UDP packets into a
> single protobuf message
> - (3) a protobuf decoder
> - (4) my business logic
>
> The problem is (2). I think something based on a FrameDecoder is not
> sufficient, because potentially multiple "conversations" are going on at
> the same time. So I should have something which buffers all input per
> ongoing conversation, and sends a message upstream when all packets for
> a certain conversation have arrived. When that happens, it should clear
> the buffer for this conversation, but not the others. Potentially I also
> want to clear incomplete buffers after a certain timeout.
>
> Is there something in netty on which I can build for this kind of
> functionality?
>
> Am I maybe complicating things too much? I am involved in the design of
> the protocol as well, so things can still be changed.
>
> Kind regards
> Jan
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/netty-users/attachments/20100507/86f4728b/attachment-0001.html
More information about the netty-users
mailing list