我想使用Scala / Akka / Play创建一个简单的Websocket应用程序。
从示例(例如webchat或 Scala Days的最近演讲)中所看到的是JavaScript / Coffeescript、HTML模板等技术的混合应用。
我的Websocket应用程序的客户端也将是本地移动应用程序(Android,iOS),因此我需要进行“超越浏览器”的思考。
如何创建一个能简单推送“hello”字符串的Websocket应用程序?
我想使用Scala / Akka / Play创建一个简单的Websocket应用程序。
从示例(例如webchat或 Scala Days的最近演讲)中所看到的是JavaScript / Coffeescript、HTML模板等技术的混合应用。
我的Websocket应用程序的客户端也将是本地移动应用程序(Android,iOS),因此我需要进行“超越浏览器”的思考。
如何创建一个能简单推送“hello”字符串的Websocket应用程序?
WebSocket连接由服务器端和客户端两个部分组成。您可以使用Play2制作服务器端,使用Android(请参见websocket-android-phonegap)、iOS(请参见Unitt)或JavaScript应用程序实现客户端。
以下是一个基本的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
服务器已经准备好运行。您可以使用 JavaScript 应用程序、Android 应用程序等连接到您的 WebSocket。客户端则是另一回事。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'
url发送到其中。
Enumerator.imperative
看起来在最近的 Play 版本中已经被弃用或删除,这是一个在较新版本中的回声应用程序:http://blog.controlgroup.com/2013/10/17/simple-websockets-example-play-2-2-0/ 希望对其他人有所帮助... - okonomichiyaki你可以使用传统的Socket,但会遇到端口转发(即通过防火墙)的问题,或者你可以使用Websocket客户端库,比如Java中的这个:http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html