播放框架 websocket 发生时不会向前端发送消息
Posted
技术标签:
【中文标题】播放框架 websocket 发生时不会向前端发送消息【英文标题】:Play framework websocket is not sending messages to front-end when it happens 【发布时间】:2017-06-21 07:16:36 【问题描述】:我们需要在 for 循环中向前端发送消息,我们考虑使用 websocket 来实现。
我们的Js代码(前端——这里wsInterfaceBulkChecks是元素id@html页面)
var intWebsocket = function ()
var wsUrl = 'ws://localhost:9000/bvWSInterface';
var WS = window['MozWebSocket'] ? window['MozWebSocket'] : WebSocket;
var socket = new WS(wsUrl);
$('#wsInterfaceBulkChecks').data('wsObj', socket);
socket.onmessage = function(event)
console.log(event.data);
路由器配置 GET /bvWSInterface @controllers.admin.BulkChecks.bvWSInterface()
Java 代码
public WebSocket<String> bvWSInterface()
return new WebSocket<String>()
// called when websocket handshake is done
public void onReady(WebSocket.In<String> in, WebSocket.Out<String> out)
for (int i=0; i<5; i++)
out.write("Count: " + i);
try
Thread.sleep(2000);
catch (InterruptedException e)
e.printStackTrace();
;
问题是它在 html 调试器窗口一次打印 0 到 4(没有任何延迟 - websocket 一次将所有 4 发送到控制台)。我们的期望如下
打印 0 -> 等待 2 秒
打印 1 -> 等待 2 秒等
为什么 Web 套接字一次将所有 0-4 条消息发送到前端? (我们认为它应该在它发生时发送 - 消息发送到前端之间有 2 秒的中断)。请帮助我们解决这个问题。
【问题讨论】:
【参考方案1】:试试这个
new Thread(new Runnable()
@Override
public void run()
for (int i=0; i<5; i++)
out.write("Count: " + i);
try
Thread.sleep(2000);
catch (InterruptedException e)
e.printStackTrace();
).start();
【讨论】:
tx 寻求帮助。我会试一试的。以上是关于播放框架 websocket 发生时不会向前端发送消息的主要内容,如果未能解决你的问题,请参考以下文章
websocket前端发送一个消息 后端还没执行完 收不到第二条消息