一、WebSocket 开发 (v2)
此内容 v2.6.0 后支持
开发 WebSocket 服务端,需要引入相关的信号启动插件:
- 或者 solon-boot-websocket (端口为:主端口 + 10000)
- 或者 solon-boot-websocket-netty (端口为:主端口 + 10000)
- 或者 solon-boot-smarthttp
- 或者 solon-boot-undertow
- 或者 solon-boot-jetty + solon-boot-jetty-add-websocket
如果需要修改端口(对独立的 WebSocket 插件有效;否则共享 Http 端口):
server.websocket.port: 18080
1、主接口说明
接口 | 说明 | 补充 |
---|---|---|
WebSocket | 会话接口 | |
WebSocketListener | 监听器接口 | 其它监听器,都是它的实现 |
2、启用
public class DemoApp {
public static void main(String[] args) {
Solon.start(DemoApp.class, args, app->{
//启用 WebSocket 服务
app.enableWebSocket(true);
});
}
}
3、监听示例
以地址 ws://localhost:18080/ws/demo/12?token=xxx
为例:
- 标准 WebSocketListener 接口模式
@ServerEndpoint("/ws/demo/{id}")
public class WebSocketDemo implements WebSocketListener {
@Override
public void onOpen(WebSocket socket) {
//path var
String id = socket.param("id");
//query var
String token = socket.param("token");
if(("admin".equals(id) && "1234".equals(token)) == false){
socket.close();
}
/*此处可以做签权;会话的二次组织等...*/
}
@Override
public void onMessage(WebSocket socket, String text) throws IOException {
socket.send("我收到了:" + text);
}
@Override
public void onMessage(WebSocket socket, ByteBuffer binary) throws IOException {
}
@Override
public void onClose(WebSocket socket) {
}
@Override
public void onError(WebSocket socket, Throwable error) {
}
}
- 使用 SimpleWebSocketListener,可以略掉不必要的方法
@ServerEndpoint("/ws/demo/{id}")
public class WebSocketDemo extends SimpleWebSocketListener {
@Override
public void onOpen(WebSocket socket) {
//path var
String id = socket.param("id");
//query var
String token = socket.param("token");
if(("admin".equals(id) && "1234".equals(token)) == false){
socket.close();
}
/*此处可以做签权;会话的二次组织等...*/
}
@Override
public void onMessage(WebSocket socket, String text) throws IOException {
socket.send("我收到了:" + text);
}
}