Доброго времени суток!
После обрыва связи у клиента, ZFrame.recvFrame перестает получать фреймы именно от него. От других клиентов, у которых не было сбоя, фреймы приходят. Если перезапустить сервер, все стабилизируется.
Хочется понять почему так происходит и как такую ерунду обрабатывать, чтобы клиенты не отпадали.
Код:
HashMap<ZFrame, List<String>> idHM = new HashMap<ZFrame, List<String>>();
ZMQ.Context context = ZMQ.context(1);
try (
ZMQ.Socket responder = context.socket(ZMQ.ROUTER)) {
responder.bind("tcp://*:5556");
while (!Thread.currentThread().isInterrupted()) {
// Wait for next request from the client
ZFrame identity = ZFrame.recvFrame(responder);
String message = responder.recvStr();
List<String> idTickers = parseMessage(message);
idHM.put(identity, idTickers);
try {
broadCastToClients(identity, message, idHM, responder);
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(IQFeedStream.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
context.term();
Собственно, вот именно эта строчка не получает фреймы от проблемных клиентов:
ZFrame identity = ZFrame.recvFrame(responder);
Может кто-то сталкивался с подобной проблемой? Есть идеи в какую сторону копать?