Непрерывная отправка данных через сокет Java - PullRequest
3 голосов
/ 26 октября 2009

Каков наилучший способ непрерывной отправки серии данных (массив с плавающей запятой) с сервера клиенту через сокет Java? Например, у меня есть сервер, который выдает данные с плавающей точкой каждые 1 мс, и я хотел бы отправить эти данные клиенту. Мой план состоит в том, чтобы поместить этот процесс в поток (на стороне сервера) и непрерывно отправлять его клиенту. Можно ли добиться этого через сокет Java? или я должен сначала записать данные в файл перед отправкой клиенту?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 26 октября 2009

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

Затем на стороне клиента создайте поток, который постоянно слушает сокет, считывает и распаковывает данные, когда это возможно, публикует их где-нибудь для обработки кода вашего клиента, чтобы использовать их, а затем возвращается к опросу цикл ожидания, пока сервер не отправит больше данных.

Просто убедитесь, что на стороне клиента вы предоставляете метод уничтожения потока слушателя, если сокет закрывается (сервер выключается, перехват сети и т. Д.).

3 голосов
/ 26 октября 2009

Используя простое программирование сокетов, это совсем не проблема:

  • Открыть TCP-соединение между сервером и клиентом
  • Отправка данных с использованием соединений InputStream и OutputStream
  • Закрыть соединение в случае любой ошибки / отключения

Обратите внимание, что это решение не очень масштабируемо, и если его нужно масштабировать, вам нужно использовать неблокирующий ввод-вывод (чтобы ваш сервер не подавлял все открытые соединения и запущенные потоки)

1 голос
/ 26 октября 2009

Пока клиент держит соединение открытым, вы можете отправлять данные.

Если вы используете http, то соединение закрывается после каждого запроса, если вы не используете что-то вроде Comet. Вы можете посмотреть википедию, но эта статья может быть полезна от java POV: http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp-test.html

Обновление Если вы используете обычный сервер на основе сокетов и клиент, настроенный на постоянное соединение, вы можете отправлять данные в любое время, если соединение установлено. открыть. Оно будет закрыто только теми, кто подключен или возникла проблема с сетью.

Но если вы используете http, то правила немного меняются, для чего и предназначен второй абзац.

0 голосов
/ 26 октября 2009

Самый простой способ - использовать ObjectInputStream / ObjectOutputStream на стороне клиент / сервер, а затем клиент пытается выполнить чтение из потока. Если новых данных нет, клиент ожидает, и как только сервер отправляет новый массив, клиент читает его, обрабатывает и снова начинает ждать. В зависимости от того, что делает клиент, может быть целесообразно поместить чтение в дополнительный поток, который передает массив фактическому методу обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...