play framework 2.5.x web套接字java

ukdjmx9f  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(365)

我按照playframework2.5.x到javawebsockets的官方文档中的说明,创建了一个具有此函数的控制器

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

还有一个演员类mywebsocketactor:

public class MyWebSocketActor extends UntypedActor {

    public static Props props(ActorRef out) {
        return Props.create(MyWebSocketActor.class, out);
    }

    private final ActorRef out;

    public MyWebSocketActor(ActorRef out) {
        this.out = out;
    }

    public void onReceive(Object message) throws Exception {
        if (message instanceof String) {
            out.tell("I received your message: " + message, self());
        }
    }
}

然后应用程序启动我尝试在ws://localhost:9000 as 在官方文件中写道:
提示:您可以在上测试websocket控制器https://www.websocket.org/echo.html. 只需将位置设置为ws://localhost:9000.
但是web套接字似乎无法访问,如何测试它?
谢谢

qaxu7uf2

qaxu7uf21#

为了处理websocket连接,还必须在 routes 文件。 GET /ws controllers.Application.socket() 那么您的websocket端点将是 ws://localhost:9000/ws -使用它来测试echo服务。

pjngdqdw

pjngdqdw2#

在安东的帮助下,我终于解决了这个问题!第一个:remove static from socket()方法

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

然后在routes文件中为socket()方法添加一个端点

GET     /ws                          controllers.HomeController.socket()

此时,您必须以这种方式使用ssl/tls启动应用程序,例如:

activator run -Dhttps.port=9443

在websocket.org/echo.html中插入 wss://localhost:9443/ws 在位置字段中,它连接到websocket!
如果我来拜访 https://localhost:9443/ws 我继续得到消息
需要升级到websocket

相关问题