Sokcet.D 与 Solon 集成 (v2)
引入 solon.boot.socketd 及一个或多个传输协议包:
<!-- socket.d 的 solon 服务启动插件 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-boot-socketd</artifactId>
</dependency>
<!-- 使用哪个(或多个)传输包(按需选择)//这些传输包,会使用独立的端口 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>socketd-transport-netty</artifactId>
<version>${socketd.version}</version>
</dependency>
然后启用服务:
public class DemoApp {
public static void main(String[] args) {
Solon.start(DemoApp.class, args, app->{
//启用 Sokcet.D 服务(它是 solon-boot-socketd 插件的启用控制)
app.enableSocketD(true);
});
}
}
1、集成后的配置参考
更多配置参考:应用常用配置说明
#服务 socket 信号名称,服务注册时可以为信号指定名称(默认为 ${solon.app.name})
server.socket.name: "waterapi.tcp"
#服务 socket 信号端口(默认为 20000+${server.port})
server.socket.port: 28080
#服务 socket 信号主机(ip)
server.socket.host: "0.0.0.0"
#服务 socket 信号包装端口 //v1.12.1 后支持 //一般用docker + 服务注册时才可能用到
server.socket.wrapPort: 28080
#服务 socket 信号包装主机(ip)//v1.12.1 后支持
server.socket.wrapHost: "0.0.0.0"
#服务 socket 最小线程数(默认:0表示自动,支持固定值 2 或 倍数 x2)) //v1.10.13 后支持
server.socket.coreThreads: 0
#服务 socket 最大线程数(默认:0表示自动,支持固定值 32 或 倍数 x32)) //v1.10.13 后支持
server.socket.maxThreads: 0
#服务 socket 闲置线程或连接超时(0表示自动,单位毫秒)) //v1.10.13 后支持
server.socket.idleTimeout: 0
#服务 socket 是否为IO密集型? //v1.12.2 后支持
server.socket.ioBound: true
不同协议架构的独立端口,自动处理表:
协议架构 | 端口 | 示例 |
---|---|---|
sd:tcp | ${server.socket.port} | 28080 |
sd:udp | ${server.socket.port} + 1 | 28081 |
sd:ws | ${server.socket.port} + 2 | 28082 |
2、使用注解 @ServerEndpoint
(此注解与 websocket 是共用的)
支持 {name}
获取路径变量。(不过,不建议使用路径变量)
@ServerEndpoint("/demo/{id}")
public class WebSocketDemo extends SimpleListener {
@Override
public void onMessage(Session session, Message message) throws IOException {
session.send("我收到了:" + message);
//session.param("id"); //获取路径变量,querString变量,握手变量
}
}