Thank you for reply. I didn't fully understand what you said last night. Today I read your message again and found it's really a great approach to this problem. I even needn't create a new ThreadPoolExecutor.
According what you said, one messasgeWritten trigers another messageWrite until the prioritized queue in the filter is fully consumed. It just solved my problem. Many thanks! -------------------------------------------------- From: "Emmanuel Lecharny" <[email protected]> Sent: Tuesday, December 15, 2009 8:38 PM To: <[email protected]> Subject: Re: How do I send prioritized messages with Mina? > 刘伟 a écrit : >> I'm working on a streaming server using Mina, there are >> two types of packets in my server: the control messages that's short but >> with >> higher priority, and the media packets that's big but with lower priority. I >> know inside mina there's a message queue maintained for written messages, so >> that the write request can return immediately. This makes thing pretty bad: >> if I >> want to write a control message, the queue is filled with media data and the >> control message is sent until all media data is flushed. >> >> So I'm expecting a method like: >> IoSession.write(IoBuffer message, int priority). For the remaining messages >> in >> the queue, the ones with lower priority always get sent before the ones with >> higher priority. Does anyone know there be some package can help me do this? >> Or >> do I need to override an existing Mina class - maybe NioProcessor? >> > One way to handle this is to write a filter you'll add at the beginning > of the chain (ie, it will be the last one executed before the messages > will be queued to be written). This filter will itself manage the queue > of messages, and can manage the priority. > > Messages will be written one by one, and only when the previous one has > been sent (ie, the selector is ready for Write). IFAIR, you know that > when the messageSent event is received. Then you can send the next > message. If there is a higher priority message arriving, then you can > immediately write it. > > I *think* this approach can work, assuming that the messageSent can > really be handled in this filter. Writing such a filter should not be a > complex task, and I guess a POC can we whipped in a few hourd. > > > Hope it helps. > > -- > Regards, > Cordialement, > Emmanuel Lécharny > www.nextury.com > > >
