2013-07-20 3 views
18

Я хотел бы создать простое приложение для веб-приложений, используя Scala/Akka/Play.Простой Websocket в scala/akka/play

Что я вижу из примеров (например, webchat или recent talk at the Scala Days), представляет собой смесь между шаблонами JavaScript/Coffeescript, html и т. Д.

Клиенты моего приложения Websocket также будут родными мобильными приложениями (Android, iOS), поэтому мне нужно подумать «из браузера».

Как создать приложение для веб-приложений, которое может просто нажать строку «привет»?

+0

Я смущенный. WebSockets - это обходной путь, который существует, потому что HTTP не разрешает двунаправленные связи с состоянием. У вас нет этого ограничения при разработке собственного приложения (за исключением случаев, когда вы используете Apache Cordova или аналогичные, но тогда вы будете использовать Javascript). Так почему вы берете этот маршрут? – Carsten

+0

Привет Carsten. Я не знаю ни одного другого дуплексного протокола, который позволяет передавать данные в реальном времени с сервера на клиент. Push-уведомления для родных приложений (например, GCM) не в режиме реального времени. Вы знаете альтернативный способ? – ticofab

+0

0MQ - это решение для потоковой передачи пабов/суб. http://zeromq.org/ –

ответ

18

В соединении WebSocket есть две части: сервер и клиент. Вы можете просто сделать серверную часть с помощью PLAY2 и реализовать клиент с Android (см websocket-android-phonegap), прошивкой (см Unitt), приложением яваскрипта ...

Вот пример для самой основной связи с WebSocket, взятой из http://blog.tksfz.org/2012/10/12/websockets-echo-using-play-scala-and-actors-part-i/ :

package controllers 

import play.api.mvc._ 

object Application extends Controller { 
    def index = WebSocket.using[String] { 
    val out = Enumerator.imperative[String]() 
    val in = Iteratee.foreach[String] { 
     msg => 
     out.push(msg) 
    } 
    (in, out) 
    } 
} 

Вы только должны установить маршрут, указывающий на контроллер conf/routes:

GET /connect Application.index 

сервер повторно ady для запуска. Затем вы можете подключиться к вашему WebSocket с помощью приложения javascript, приложения для Android и т. Д. Клиентская сторона - другое дело.

Если вы используете хром или хром, просто откройте консоль JavaScript инструментов разработчика, и вы можете подключиться к серверу просто так:

ws = new WebSocket('ws://localhost:9000/connect') 
ws.onmessage = function(message) { console.log(message); }; 
ws.send('test') 

Он пошлет вас обратно сообщение и зарегистрировать ее в JavaScript при каждом отправке.

Вы также можете использовать тест эхо-сигнала http://www.websocket.org/echo.html и подать его на ваш адрес 'ws://localhost:9000/connect'.

+8

'Enumerator.imperative', кажется, устарел или удален из последних версий Play, это приложение echo в более новой версии: http://blog.controlgroup.com/2013/10/17/simple-websockets-example- play-2-2-0/надеюсь, что это поможет кому-то еще ... – spacemanaki

2

Либо вы можете использовать старую боль гнездо, но вы будете иметь проблемы с переадресацией портов (т.е. через брандмауэры), или вы можете можете использовать клиентскую библиотеку WebSocket, такие, как этот в Java: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html

+0

отличная минимальная зависимость от структуры – Kruser

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