播放框架2.5.x Web Socket Java

时间:2016-03-28 11:49:35

标签: java sockets playframework java-websocket

我按照Play框架2.5.x到Java Websockets的官方文档中的说明,创建了一个具有此功能的控制器

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

一个Actor类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,如官方文档中所述:

  

提示:您可以测试WebSocket控制器   https://www.websocket.org/echo.html。只需将位置设置为   WS://本地主机:9000

但是网络套接字似乎无法访问,我该如何测试呢?

由于

2 个答案:

答案 0 :(得分:2)

为了处理WebSocket连接,您还必须在routes文件中添加路由。

GET /ws controllers.Application.socket()

然后您的WebSocket端点将为ws://localhost:9000/ws - 使用它来使用echo服务进行测试。

答案 1 :(得分:2)

最后在安东的帮助下我解决了它! 首先:从socket()方法中删除static

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

然后在路由文件中为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