【发布时间】:2016-03-07 12:22:38
【问题描述】:
我创建了一个接收单个消息的 Web 套接字,它将进行一些处理并将响应消息返回给客户端。我已经使用 Play 框架创建了 Web 套接字。代码sn-p如下。
代码 sn-p:
def multi_request = WebSocket.tryAccept[String] {
request =>
val (out, channel) = Concurrent.broadcast[String]
val in = Iteratee.foreach[String] {
msg =>
channel push ("message " + msg +" request Time: " + System.currentTimeMillis()/1000)
if(msg.equals("1")) {
Thread.sleep(20000);
println(msg);
} else if(msg.equals("2")) {
Thread.sleep(10000);
println(msg);
} else {
println(msg);
}
channel push ("message " + msg +" response Time: " + System.currentTimeMillis()/1000)
}
Future.successful(Right(in, out))
}
我已经从http://www.websocket.org/echo.html 测试了我的网络套接字。 我已经连接了我的网络套接字并依次传递了三个消息,分别为“1”、“2”和“3”。传递这些消息时,我得到了以下响应。
SENT: 1
RESPONSE: message 1 request Time: 1457351625
SENT: 2
SENT: 3
RESPONSE: message 1 response Time: 1457351645
RESPONSE: message 2 request Time: 1457351646
RESPONSE: message 2 response Time: 1457351656
RESPONSE: message 3 request Time: 1457351656
RESPONSE: message 3 response Time: 1457351656
似乎,网络套接字请求按顺序而不是并行命中服务器。当我通过它时,立即从客户端发送的三个消息。但它没有同时访问服务器。
即第二个请求在第一个响应消息之后命中。第三条消息在第二条响应消息之后命中。
这是默认的网络套接字行为吗?
或者我想在 Scala play Framework 中实现多线程来处理这种请求?
或者我是否遗漏了代码中处理来自单个客户端的多个请求的任何内容?
【问题讨论】:
标签: scala playframework websocket playframework-2.3