REST API для CometD

В настоящее время я использую сервер CometD вместе с реализацией клиента jQuery. Я хотел бы знать, есть ли какой-либо эффективный способ иметь REST API на моем сервере, чтобы клиент мог получать информацию (то есть строку). Мне нужно получить строку только один раз, после чего мне больше не нужно использовать сервис.

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

Однако я нахожу это очень окольным путем, и, кроме того, клиенту больше не нужно слушать канал после получения строки. Есть ли лучший способ сделать это?

Обновление: я также использую сервер для других каналов в реальном времени, поэтому я выбрал CometD для его функции публикации-трансляции.


person Wei Hao    schedule 07.06.2012    source источник


Ответы (1)


Если вам просто нужно вернуть строковую информацию обратно клиенту, который ее запросил, и вам не нужно транслировать эту информацию другим клиентам, то вам не нужен CometD: достаточно простого сервлета (вам даже не нужен REST).

Если, с другой стороны, вам нужно транслировать строковую информацию нескольким клиентам, то CometD — правильный инструмент для этой работы, и, в конце концов, это не так уж сложно для того, что он делает.

Клиент:

cometd.init("http://server/cometd");
cometd.subscribe("/info", function(m)
{
    // Do something with the message, then disconnect
    cometd.disconnect();
});
cometd.publish("/service/myservice", {});

Сервер:

@Service
class MyService
{
    @Inject
    private BayeuxServer bayeux;
    @Session
    private LocalSession session;

    @Listener("/service/myservice")
    public void processMyService(ServerSession s, ServerMessage m)
    {
        String info = retrieveInfo();
        // Broadcast
        bayeux.getChannel("/info").publish(session, info, null);
    }
}

Здесь вы можете найти дополнительную информацию о аннотированных сервисах CometD.

person sbordet    schedule 07.06.2012
comment
Извините, я забыл добавить, что у меня есть и другие каналы, использующие архитектуру CometD. Я знаю о методе сервлета, но можно ли интегрировать его с сервером CometD? - person Wei Hao; 07.06.2012