播放框架 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 发生时不会向前端发送消息的主要内容,如果未能解决你的问题,请参考以下文章

播放 WebSockets 服务器推送示例

websocket前端发送一个消息 后端还没执行完 收不到第二条消息

使用 Akka 和 Websockets 玩框架

Spring4.0 WebSocket怎么向指定用户发送信息

播放框架1.2.5 Websocket

在web前端怎么发送http协议的put delete请求