Я пытаюсь заставить два приложения взаимодействовать через TCP с сообщениями на основе JSON.Для этого я использую библиотеку Джексона (1.9.4).Клиентская сторона просто открывает сокет и затем прослушивает все входящие сообщения с сервера.Это выглядит так:
ObjectMapper mapper = new ObjectMapper().configure(
Feature.AUTO_CLOSE_SOURCE, false);
final ObjectReader reader = mapper.reader(Message.class);
Socket s = new Socket("192.168.1.102", 32000);
final Reader in = new InputStreamReader(socket.getInputStream());
while (true) {
Message message = reader.readValue(in);
process(message)
}
Таким образом, считыватель блокирует и ждет, пока сообщение не будет завершено, чтобы проанализировать его и обработать.Моя проблема в том, что иногда некоторые сообщения пропускаются при чтении.Если сервер отправляет msg1
, msg
и msg3
, возможно, msg2
потеряно, но msg3
читается без проблем.
Чтобы сделать это страннее, этого не происходитвсе время, но около 50%.И клиент, и сервер являются однопоточными, поэтому никто больше не имеет доступа к сокету.И я точно знаю, что сообщения приходят, я пытался смоделировать клиента с помощью nc
, и входящие сообщения всегда верны, поэтому я знаю, что это при чтении.
Поскольку это сокет TCP, порядок, в котором они прибыли, гарантирован, поэтому я подозреваю, что ObjectReader
молча отбрасывает некоторые вещи без каких-либо исключений.ключ к тому, что может происходить?Любые мысли приветствуются!:)