Solon v2.7.5

Sokcet.D 与 Solon 集成 (v2)

</> markdown

引入 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-java-tcp</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} + 128081
sd:ws${server.socket.port} + 228082

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变量,握手变量
    }
}