2015-01-15 4 views
0

У меня есть клиентское/серверное приложение Java, в котором я делюсь файлом (tsv-файл) с одним клиентом, этот клиент может просматривать и изменять его в своем пользовательском интерфейсе и отправлять обратно обновленную версию к серверу. Я делаю это с использованием сокетов TCP.Протокол обновления клиентов при изменении файла

Теперь я хотел бы сделать его доступным для нескольких клиентов. Для этого я хотел использовать следующий «протокол»: - каждый раз, когда на клиенте производится изменение, он отправляет на сервер измененную запись с некоторой информацией об изменении (EDIT, ADD, DELETE). Сервер получает это и отправляет изменения всем подключенным клиентам. - Затем я делаю клиент «прослушиванием» сервера во входном потоке сокета в отдельном потоке, ожидая уведомлений об обновлении.

Моя проблема заключается в том, что связь в сокетах не работает с этим дизайном. Я не знаю, откуда это происходит, когда я отлаживаю свой код, метод «получать» блокирует. Я думаю, это может быть потому, что на стороне сокета клиента я получаю сообщения в двух разных потоках в одном и том же входном потоке, неужели это проблема? В противном случае я должен открыть 2 сокета с каждым клиентом, один для прослушивания обновлений и один для регулярного использования?

Если у вас есть какие-либо другие предложения по протоколу я должен использовать, я буду рад их услышать :)

ответ

0

Я думаю, вы можете использовать Websockets для достижения этой цели.

+0

Спасибо за совет, но я хочу продолжать использовать сокеты Java и использовать простой интерфейс терминала для этого приложения. – Kilian

+0

Тогда ваш сокет должен быть двунаправленным по своей природе. И вам нужно использовать какой-то механизм RPC, чтобы легко обнаружить тип сообщения (запрос/ответ/уведомление) –

Смежные вопросы