Сервер отправляет «запрос ping» клиенту по одному URL-адресу, используя JAX-RS и RESTeasy - PullRequest
0 голосов
/ 31 августа 2018

Я хотел бы создать веб-приложение, способное «пинговать» клиента после того, как клиент получит доступ к определенному URL-адресу (например, www.example.com/ping/hello), чтобы получить время прохождения туда и обратно между сервером и клиент. И под запросом ping я подразумеваю простой запрос с отметкой времени от сервера, и клиент отправляет обратно ответ со своей отметкой времени. Я надеялся, что это действие будет выполнено с одним URL, если это возможно.

Поток примерно такой:

  1. Клиент переходит на URL
  2. Сервер отправляет ответ клиенту со своей отметкой времени
  3. Клиент затем отправляет другой ответ на сервер с новой отметкой времени
  4. Сервер окончательно завершает соединение с 200 OK

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

Мой серверный код выглядит примерно так:

@GET
@Path("/helloping")
public Response getPingServerClient(@Context HttpServletRequest req) {
    String result = Long.toString(System.currentTimeMillis());

    return Response.status(200).entity(result).build(); 

    //the code to receive the response from client containing timestamp
}

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я не фанат того, что вы предлагаете, потому что вы в основном заставляете клиента настраивать код, чтобы он сам по себе стал сервером. Это неудобно для клиента.

Вместо этого рассмотрим метод пинг-понга, когда клиент сначала вызывает конечную точку сервера ping, которая возвращает временную метку сервера. Как только клиент получает ответ сервера ping, ему предписывается вызвать второй метод pong, который принимает новую метку времени.

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

0 голосов
/ 01 сентября 2018

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

Я могу придумать 3 варианта для этой цели:

  1. HTTP заголовок
  2. Параметр запроса в GET-запросе
  3. POST-запрос с маркером для различения двух вызовов

Поток запросов / ответов будет выглядеть примерно так:

Client -> Server : Request
Server -> Client : Response with timestamp t1 
Client -> Server : Request with timestamp t2 and the above mentioned marker
Server -> Client : Response 200

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

...