我按照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
但是网络套接字似乎无法访问,我该如何测试呢?
由于
答案 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