加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Websockets,Play Framework和Actor

发布时间:2020-12-15 02:11:40 所属栏目:Java 来源:网络整理
导读:我需要通知所有用户有关向数据库添加新记录的信息. 所以,我有以下代码 Application.java – 这里我放置了套接字处理程序方法 public WebSocketJsonNode sockHandler() { return WebSocket.withActor(ResponseActor::props);} 然后我打开了连接 $(function()
我需要通知所有用户有关向数据库添加新记录的信息.
所以,我有以下代码

> Application.java – 这里我放置了套接字处理程序方法

public WebSocket<JsonNode> sockHandler() { 
    return WebSocket.withActor(ResponseActor::props);
}

>然后我打开了连接

$(function() {
    var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket
    var socket = new WS("@routes.Application.sockHandler().webSocketURL(request)")
    socket.onmessage = function(event) {
        console.log(event);
        console.log(event.data);
        console.log(event.responseJSON)
    }});

>我的演员班

public class ResponseActor extends UntypedActor {
    private final ActorRef out;
    public ResponseActor(ActorRef out) {
        this.out = out;
    }
    public static Props props(ActorRef out) {
        return Props.create(ResponseActor.class,out);
    }
    @Override
    public void onReceive(Object response) throws Exception {
        out.tell(Json.toJson(response),self());
    }
}

>最后,我认为,我需要从我的响应控制器调用Actor

public Result addPost() {
    Map<String,String[]> request = request().body().asFormUrlEncoded();
    Response response = new Response(request);
    Map<String,String> validationMap =  ResponseValidator.validate(response.responses);
    if (validationMap.isEmpty()) {
        ResponseDAO.create(response);
        ActorRef responseActorRef =  Akka.system().actorOf(ResponseActor.props(outRef));
        responseActorRef.tell(response,ActorRef.noSender());
        return ok();
    } else {
        return badRequest(Json.toJson(validationMap));
    }
}

我的问题是:什么是ActorRef,我在哪里可以获得它的控制器?
您能否澄清一下通过Web套接字向所有客户端发送更新的逻辑?

解决方法

我正在研究一个类似的问题,我自己,虽然在Scala中,所以我会看看我是否可以根据我到目前为止学到的东西提供帮助(我有自己的问题在我的演员之后收到消息套接字打开).

接受与actor的WebSocket连接不是通过典型的请求/响应模型来完成的,例如向服务器发送对页面的GET请求.相反,您需要使用Play的WebSockets API:

import akka.actor.*;
import play.libs.F.*;
import play.mvc.WebSocket;

public static WebSocket<String> socket() {
    return WebSocket.withActor(ResponseActor::props);
}

Play WebSockets文档应该能够比我更好地帮助您:
https://www.playframework.com/documentation/2.4.x/JavaWebSockets

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读