Solon Web 开发,十三、WebSocket
开发 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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义