Hi,

I'm using Mina to distribute incoming data from a hardware device to many
connected clients. The incoming data are chunks of bytes representing
strings. Whenever a new line is detected in a data chunk the row must be
extracted, several prefixes (depending on the source channel of the hardware
device) must be added to each row and each row must also be persisted to the
file system. Each connected client also passes a regular expression filter
to the Mina server and only rows matching this filter should be forwarded to
the client. There may potentially be a lot of clients connected to the Mina
server and the incoming data that should be distributed from the hardware
device _may_ come at a rate of several Mbit/s. The problem is that the data
flow from the hardware device differs quite a lot. At times a single row is
only sent to the Mina server once every minute, at other times it may by
several Mbits per second as I've previously mentioned. How do I deal with
this situation? I've read in the forum (
http://mina.markmail.org/message/k2t5yx7xaztgykcp?q=write+throughput) that
under heavy load the TextLineEncoder (which I'm using but I've modified it
slightly) is really quite inefficient because I get LOTS of small objects
(strings) that should be sent to the client. A better way suggested by that
thread was to create your own Buffer of, say 64k in size, and just flush the
whole buffer to the write method when its full. I figure that this would
probably work ok when the load is high but what about when the server only
receives one message per minute? Should I perhaps have a thread monitoring
the buffer and perform a flush on it on a given time interval if it's not
full? Any ideas or suggestions? What write buffer size should I be using? A
text row is usually about 50 characters long. I'm using Mina 1.1.7.

Thanks
Johan

Reply via email to