application using NIO - a server handles multiple connections using Selector and stores clients. Each client also has a selector for reading messages from server (server periodically sends packets to clients - commands), so server may write data to the any client anytime. Sometimes server sends more than one message - it loops over some ready data packets and writes them to client simultaneously. Well, the problem is that client doesn't recieve that packets properly when server writes a lot of packets the same time. It's hard to explain why can it happen, for example - server writes 10 packets of 10 bytes, so client should recieve that 10 packets, but read() method on client side returns one packet of 90 bytes and one more of 10. Well, i tried to switch to blocking mode - it helped. I tried to add delay (sleep for 2 ms) before read() on client side - it helped. It really looks like specific behaviour of non-blocking socket channel. So, is there a way to write, for example, 100 packets the same time, in the loop, and read each of them properly on client-side? (without switching to blocking mode / avoiding selector)?
http://urchin.earth.li/~twic/Sequenced_Packets_Over_Ordinary_TCP.html
Im so lazy to read rn lol
Dont use read, read() use readfully
Обсуждают сегодня