У меня есть клиентское/серверное приложение Java, в котором я делюсь файлом (tsv-файл) с одним клиентом, этот клиент может просматривать и изменять его в своем пользовательском интерфейсе и отправлять обратно обновленную версию к серверу. Я делаю это с использованием сокетов TCP.Протокол обновления клиентов при изменении файла
Теперь я хотел бы сделать его доступным для нескольких клиентов. Для этого я хотел использовать следующий «протокол»: - каждый раз, когда на клиенте производится изменение, он отправляет на сервер измененную запись с некоторой информацией об изменении (EDIT, ADD, DELETE). Сервер получает это и отправляет изменения всем подключенным клиентам. - Затем я делаю клиент «прослушиванием» сервера во входном потоке сокета в отдельном потоке, ожидая уведомлений об обновлении.
Моя проблема заключается в том, что связь в сокетах не работает с этим дизайном. Я не знаю, откуда это происходит, когда я отлаживаю свой код, метод «получать» блокирует. Я думаю, это может быть потому, что на стороне сокета клиента я получаю сообщения в двух разных потоках в одном и том же входном потоке, неужели это проблема? В противном случае я должен открыть 2 сокета с каждым клиентом, один для прослушивания обновлений и один для регулярного использования?
Если у вас есть какие-либо другие предложения по протоколу я должен использовать, я буду рад их услышать :)
Спасибо за совет, но я хочу продолжать использовать сокеты Java и использовать простой интерфейс терминала для этого приложения. – Kilian
Тогда ваш сокет должен быть двунаправленным по своей природе. И вам нужно использовать какой-то механизм RPC, чтобы легко обнаружить тип сообщения (запрос/ответ/уведомление) –