2015-08-06 15 views
2

Я разработал Java-клиент, который делает подключение к серверу с использованием Java-сокетов. Для обмена информацией я использовал http-Protocol. В принципе, я делаю подключение через сокет, и я написал метод на стороне клиента, который делает http-запросы на сервер. Сервер, к которому я подключаюсь, является очень простым сервером, который я разработал сам. Я хочу спросить, можно ли сделать длинный опрос, используя метод запроса через сокеты.длинный опрос с использованием java-сокетов

Поскольку у меня есть запрос-метод в моем классе клиенте, у меня есть два варианта: непрерывный запрос: состоит в отправке миллисекунды запроса с просьбой, произошло ли новое событие. Продленный запрос (называемый длинным опросом): клиент отправляет запрос. Сервер ответит, если у него есть ответ. В противном случае он не отправит ответ, и запрос будет отключен. В то время клиент посылает новый запрос

Вот описание моей модели:

I wrote a simple http-client and a simple http-server. 
*The client has a method request 
* the server has a method respond. 
*The client send a get-request by using its request-method to my server (gives back a command to the client) 
**That server reponds to this request using its respond-method. 

Как я могу продлить программу? Как реализовать длительный опрос с использованием моего доступного клиента и сервера?

+1

Определить длительный опрос. Вы ограничены семантикой HTTP. Неясно, что вы спрашиваете. – EJP

+0

Я уже запрограммировал модель клиент-сервер: один клиент и один сервер. Поэтому я написал простой http-клиент и простой http-сервер. У клиента есть запрос метода, и у сервера есть способ ответа. Клиент отправляет запрос на получение запроса, используя свой запрос метода на мой сервер, и этот сервер отвечает на этот запрос, используя свой метод ответа. Программа отлично работает. Как я могу продлить свою программу. Как я могу реализовать длительный опрос, используя мой доступный клиент и сервер? – amitakCs

+0

Что вы подразумеваете под длинным опросом? –

ответ

1

Я бы сказал, что для простого решения (производительность и так оставлено в стороне) вам не нужно много чего делать: вы запрашиваете «событие» с сервера. Сервер принимает запросы в цикле и делегирует обработку каждого запроса другому потоку (см. Java.util.concurrent.ExecutorService). Каждый поток обработки ожидает, пока событие будет доступно (вы можете использовать java.util.concurrent.BlockingQueue) и отвечает на запрос. Если настроен тайм-аут (см. Socket.setSoTimeout, возможно, нет тайм-аута), и истечет время ожидания (throwing java.net.SocketTimeoutException), клиент может закрыть существующее соединение и снова подключиться.

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

Если у вас много клиентов, рассмотрите возможность использования неблокирующего ввода-вывода на сервере. При использовании традиционного сервера ServerSocket каждый клиент будет блокировать поток. Если это не проблема, придерживайтесь ServerSocket, поскольку она менее сложна и интуитивна.

Если вы не хотите изобретать колесо, посмотрите на Jetty или аналогичные библиотеки для части HTTP. Вы все равно можете иметь ту же структуру, но вместо простого двоичного потока вы получаете хороший HttpRequest.

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

  • Нет связанных вопросов^_^