我正在制作Play网络套接字应用。当客户端连接时,我想发送一条欢迎消息。 我使用的代码如下:
package controllers
import play.api._
import play.api.mvc._
import play.api.libs.iteratee.Concurrent
import play.api.libs.iteratee.Iteratee
import play.api.libs.concurrent.Execution.Implicits.defaultContext
object Test extends Controller {
def index = WebSocket.using[String] { _ =>
val (out,channel) = Concurrent.broadcast[String]
channel.push("Welcome to MyWebSocket")
val in = Iteratee.foreach[String] {
_ match {
case any => channel.push(any)
}
}
(in, out)
}
}
当客户端发送消息并且服务器必须响应它时,代码工作正常。但是,不会发送初始欢迎消息Welcome to MyWebSocket
。我该如何修复此代码?
[编辑]
我有点想出了问题,但还没有找到解决方案。可能会出现此问题,因为在推送欢迎消息时尚未初始化websocket。我修改了代码并替换了:
channel.push("Welcome to MyWebSocket")
带
val a = scala.concurrent.Future {
Thread.sleep(1000)
channel.push("Welcome to MyWebSocket")
}
在此之后,我得到了预期的结果(客户收到的欢迎信息)。我认为使用上述方法(Thread.sleep
和Future
)不是解决此问题的正确方法,因此欢迎使用其他解决方案。它也可能是客户端代码的问题,需要一段时间来初始化套接字。我使用Firefox和echo web-socket test作为客户端。
答案 0 :(得分:0)
您可以使用WebSocket.acceptWithActor帮助方法(have a look at this)并在actor主体中创建类似
的内容out ! "Welcome to MyWebSocket"
效果很好。