Как я могу реализовать систему публикации / подписки (server-push) с помощью AKKA на Java?

#java #akka

#java #akka

Вопрос:

Поскольку я знакомлюсь с http://akka.io /, я не могу понять, как сделать server-push.

После того, как клиент подключается к серверу, как сервер может отправлять сообщения клиенту? Например, если клиент подписался на получение котировок акций с сервера котировок. Или если сервер перенаправляет сообщения чата от одного клиента чата к другому.

НЕПРАВИЛЬНАЯ ИДЕЯ: я понимаю, что клиент может передать сообщение на сервер с IP / портом клиента, а затем сервер может инициировать новое соединение с клиентом и отправлять сообщения. Это не сработает, поскольку клиент может находиться за брандмауэром. Серверу необходимо отправлять сообщения обратно клиенту через соединение с сокетами, инициированное клиентом.

Документация AKKA бесполезна, и мои поиски в Google не принесли результатов.

Кто-нибудь знает, как это сделать?

Ответ №1:

Несколько решений, если вы хотите усложнить свою жизнь, но о, такие вызывающие.

Ну, я немного подумал о том, как finagle и akka будут переплетаться. Есть некоторое совпадение, но мне кажется, что, хотя Akka намного богаче для написания логики приложения, в качестве связующего / коммуникационного уровня ему не хватает, отчасти из-за необходимости все встроить в модель актера. Я вижу finagle как node.js на стероидах (или, по крайней мере, со статической типизацией 🙂 Более конкретно, finagle выглядит отличной платформой для работы с уровнем 5 до уровня 7.

Если finagle наберет обороты, я бы подумал, что API-интерфейсы вокруг веб-сокетов будут расти, чтобы отражать то, что было сделано с socket.ввод-вывод для node.js , но это выглядит очень просто. Я ищу оправдание, чтобы сделать это сам 🙂

В любом случае, если вы были осторожны в том, как вы адаптировались к модели actor, вы могли бы полностью остаться в Scala.

Но, как предложил Виктор, вам следует подумать об использовании websockets (я на 99% уверен, что Lift вам поможет), Comet при переходе через http. В более общем плане webhooks — это хороший стиль для pub sub в Интернете, хотя, очевидно, даже для этого потребуется, чтобы брандмауэры принимали входящие соединения.

Лично я пару лет мечтал о том, чтобы блестяще элегантные каналы кэширования Mark Nottingham делали pub sub просто с использованием http, чтобы стать стандартом, но можно было бы создать приличное приближение, если бы вы контролировали как клиентский, так и серверный код.

Ответ №2:

Akka 2.0 будет поддерживать повторное использование входящего канала для исходящих сообщений, что даст вам то, что вы запрашиваете, до тех пор, пока вам не нужно будет либо признать, что он плохо работает с брандмауэрами, либо просто использовать другой транспорт, Comet, WebSockets или, возможно, Camel.