Атмосфера / Джерси двунаправленный разговор - PullRequest
2 голосов
/ 22 ноября 2011

Я видел несколько примеров Атмосферы, включая pub-sub. Я хочу сделать что-то вроде pub-sub (клиент подписывается на канал, который является уникальным для этого клиента; сервер периодически публикует этот канал), за исключением того, что клиент также отправляет данные на сервер. Клиент отправит данные в ответ на данные, отправленные сервером, и в других случаях, когда на клиенте происходит что-то важное, о чем сервер должен знать (о чем сервер не должен подтверждать).

Возможно ли вообще сделать это с Атмосферой?

Это может выглядеть примерно так:

@Stateless
@Path("/id/{clientId}/key/{clientKey}")
public class MyService {
    @POST
    @Produces("application/xml")
    @Consumes("application/xml")
    @Suspend
    public StreamingOutput subscribe(@PathParam("clientId") String clientId,
                                     @PathParam("clientKey") String clientKey,
                                     @Context Broadcaster broadcaster,
                                     InputStream body) {
        if (!authenticate(clientId, clientKey) {
            throw new WebApplicationException(401);
        }
        broadcaster.setID(clientId);

        // Do something here... Not sure what
    }
}

Но здесь есть несколько проблем:

  1. Входящее соединение будет приостановлено, поэтому оно не сможет отправлять на сервер что-либо, кроме как при возобновлении через широковещательную рассылку;
  2. Любое использование InputStream приведет к блокировке ввода / вывода, что отрицательно сказывается на цели использования Atmosphere.

Обе эти проблемы можно решить, просто удалив @Suspend, но тогда я нахожусь в ситуации с потоком на соединение.

У меня такое ощущение, что Атмосфера здесь не будет подходящей технологией, и, возможно, мне придется сделать что-то немного более низкого уровня. Но я не уверен, как это сделать. Идеи?

Edit:

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

1 Ответ

2 голосов
/ 24 ноября 2011

Salut,

просто передайте Callable для выполнения асинхронного анализа XML. Взгляните на этот образец:

TwitterFeed

Дайте мне знать, как это происходит (или здесь, или на атмосфере-рамы@googlegroups.com)

Спасибо

- Жанфрансуа

...