с нескольких часов я думаю о том, как я должен использовать сокеты Java для отправки и получения данных. Я надеюсь, что вы можете помочь мне найти хороший способ сделать это.
Я построил структуру сервера/клиента, в которой клиент подключается к серверу и получает свой собственный поток, обрабатывающий метод запроса-ответа. Информация заключена в формате XML.
Вначале Сервер запускает чтение блокирующего сокета. Сначала я использую writeInt(), где передается длина XML-сообщения. После этого Сервер считывает количество байтов длины и анализирует сообщение. После передачи клиент переходит в состояние приема и ждет ответа.
Это нормально, но после того, как клиент аутентифицируется, сервер ждет, что придет, и блокирует.
Но что делать, когда на сервере нет информации, которую нужно передать. Я мог бы попытаться разрушить блокировку чтения и отправить сообщение клиенту. Но что происходит, если клиент приходит в голову, что у него тоже есть сообщение и тоже начинает отправлять. В этот момент никто не будет слушать.
Для этого, возможно, я мог бы использовать какой-то буфер, но у меня такое чувство, что это не тот путь, которым я должен идти.
Я искал некоторое время и нашел некоторую интересную информацию, но я не понял их хорошо. К сожалению, моя книга посвящена только этой простой модели сокета.
Может быть, я должен использовать два потока. Одна отправка и одно получение. На сервере есть база данных, в которой сообщения хранятся и ожидают передачи. Поэтому, когда сервер получает сообщение, он сохраняет это сообщение в базе данных, а также ответ типа «сообщение получено» будет храниться в базе данных. Поток-отправитель проверит наличие новых сообщений и отправит клиенту «сообщение получено». Этот подход не будет отправлять ответ в миллисекундах, но я мог представить, что он будет работать хорошо.
Я надеюсь, что дал вам достаточно информации о том, что я пытаюсь. Что бы вы порекомендовали мне, как реализовать это общение?
Спасибо