同步操作将从 Yeauty/netty-websocket-spring-boot-starter 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本项目帮助你在spring-boot中使用Netty来开发WebSocket服务器,并像spring-websocket的注解开发一样简单
<dependency>
<groupId>org.yeauty</groupId>
<artifactId>netty-websocket-spring-boot-starter</artifactId>
<version>0.6.2</version>
</dependency>
ServerEndpointExporter
对象,交给Spring容器,表示要开启WebSocket功能,样例如下:@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
@ServerEndpoint
、@Component
注解,并在相应的方法上加上@OnOpen
、@OnClose
、@OnError
、@OnMessage
、@OnBinary
、OnEvent
注解,样例如下:@ServerEndpoint
@Component
public class MyWebSocket {
@OnOpen
public void onOpen(Session session, HttpHeaders headers) throws IOException {
System.out.println("new connection");
}
@OnClose
public void onClose(Session session) throws IOException {
System.out.println("one connection closed");
}
@OnError
public void onError(Session session, Throwable throwable) {
throwable.printStackTrace();
}
@OnMessage
public void OnMessage(Session session, String message) {
System.out.println(message);
session.sendText("Hello Netty!");
}
@OnBinary
public void OnBinary(Session session, byte[] bytes) {
for (byte b : bytes) {
System.out.println(b);
}
session.sendBinary(bytes);
}
@OnEvent
public void onEvent(Session session, Object evt) {
if (evt instanceof IdleStateEvent) {
IdleStateEvent idleStateEvent = (IdleStateEvent) evt;
switch (idleStateEvent.state()) {
case READER_IDLE:
System.out.println(“read idle”);
break;
case WRITER_IDLE:
System.out.println(“write idle”);
break;
case ALL_IDLE:
System.out.println(“all idle”);
break;
default:
break;
}
}
}
}
ws://127.0.0.1:80
当ServerEndpointExporter类通过Spring配置进行声明并被使用,它将会去扫描带有@ServerEndpoint注解的类 被注解的类将被注册成为一个WebSocket端点 所有的配置项都在这个注解的属性中 ( 如:
@ServerEndpoint("/ws")
)
当有新的WebSocket连接进入时,对该方法进行回调 注入参数的类型:Session、HttpHeaders
当有WebSocket连接关闭时,对该方法进行回调 注入参数的类型:Session
当有WebSocket抛出异常时,对该方法进行回调 注入参数的类型:Session、Throwable
当接收到字符串消息时,对该方法进行回调 注入参数的类型:Session、String
当接收到二进制消息时,对该方法进行回调 注入参数的类型:Session、byte[]
当接收到Netty的事件时,对该方法进行回调 注入参数的类型:Session、Object
所有的配置项都在这个注解的属性中
属性 | 默认值 | 说明 |
---|---|---|
path | "/" | WebSocket的path,也可以用value 来设置 |
host | "0.0.0.0" | WebSocket的host,"0.0.0.0" 即是所有本地地址 |
port | 80 | WebSocket绑定端口号。如果为0,则使用随机端口(端口获取可见 多端点服务) |
prefix | "" | 当不为空时,即是使用application.properties进行配置,详情在 通过application.properties进行配置 |
optionConnectTimeoutMillis | 30000 | 与Netty的ChannelOption.CONNECT_TIMEOUT_MILLIS 一致 |
optionSoBacklog | 128 | 与Netty的ChannelOption.SO_BACKLOG 一致 |
childOptionWriteSpinCount | 16 | 与Netty的ChannelOption.WRITE_SPIN_COUNT 一致 |
childOptionWriteBufferHighWaterMark | 64*1024 | 与Netty的ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK 一致,但实际上是使用ChannelOption.WRITE_BUFFER_WATER_MARK
|
childOptionWriteBufferLowWaterMark | 32*1024 | 与Netty的ChannelOption.WRITE_BUFFER_LOW_WATER_MARK 一致,但实际上是使用 ChannelOption.WRITE_BUFFER_WATER_MARK
|
childOptionSoRcvbuf | -1(即未设置) | 与Netty的ChannelOption.SO_RCVBUF 一致 |
childOptionSoSndbuf | -1(即未设置) | 与Netty的ChannelOption.SO_SNDBUF 一致 |
childOptionTcpNodelay | true | 与Netty的ChannelOption.TCP_NODELAY 一致 |
childOptionSoKeepalive | false | 与Netty的ChannelOption.SO_KEEPALIVE 一致 |
childOptionSoLinger | -1 | 与Netty的ChannelOption.SO_LINGER 一致 |
childOptionAllowHalfClosure | false | 与Netty的ChannelOption.ALLOW_HALF_CLOSURE 一致 |
readerIdleTimeSeconds | 0 | 与IdleStateHandler 中的readerIdleTimeSeconds 一致,并且当它不为0时,将在pipeline 中添加IdleStateHandler
|
writerIdleTimeSeconds | 0 | 与IdleStateHandler 中的writerIdleTimeSeconds 一致,并且当它不为0时,将在pipeline 中添加IdleStateHandler
|
allIdleTimeSeconds | 0 | 与IdleStateHandler 中的allIdleTimeSeconds 一致,并且当它不为0时,将在pipeline 中添加IdleStateHandler
|
对注解中的
prefix
进行设置后,即可在application.properties
中进行配置。如下:
@ServerEndpoint(prefix = "netty-websocket")
@Component
public class MyWebSocket {
...
}
application.properties
中配置netty-websocket.host=0.0.0.0
netty-websocket.path=/
netty-websocket.port=80
application.properties
中的key与注解@ServerEndpoint
中属性的对应关系如下:
注解中的属性 | 配置文件中的key | 例子 |
---|---|---|
path | {prefix}.path | netty-websocket.path |
host | {prefix}.host | netty-websocket.host |
port | {prefix}.port | netty-websocket.port |
optionConnectTimeoutMillis | {prefix}.option.connect-timeout-millis | netty-websocket.option.connect-timeout-millis |
optionSoBacklog | {prefix}.option.so-backlog | netty-websocket.option.so-backlog |
childOptionWriteSpinCount | {prefix}.child-option.write-spin-count | netty-websocket.child-option.write-spin-count |
childOptionWriteBufferHighWaterMark | {prefix}.child-option.write-buffer-high-water-mark | netty-websocket.child-option.write-buffer-high-water-mark |
childOptionWriteBufferLowWaterMark | {prefix}.child-option.write-buffer-low-water-mark | netty-websocket.child-option.write-buffer-low-water-mark |
childOptionSoRcvbuf | {prefix}.child-option.so-rcvbuf | netty-websocket.child-option.so-rcvbuf |
childOptionSoSndbuf | {prefix}.child-option.so-sndbuf | netty-websocket.child-option.so-sndbuf |
childOptionTcpNodelay | {prefix}.child-option.tcp-nodelay | netty-websocket.child-option.tcp-nodelay |
childOptionSoKeepalive | {prefix}.child-option.so-keepalive | netty-websocket.child-option.so-keepalive |
childOptionSoLinger | {prefix}.child-option.so-linger | netty-websocket.child-option.so-linger |
childOptionAllowHalfClosure | {prefix}.child-option.allow-half-closure | netty-websocket.child-option.allow-half-closure |
readerIdleTimeSeconds | {prefix}.reader-idle-time-seconds | netty-websocket.reader-idle-time-seconds |
writerIdleTimeSeconds | {prefix}.writer-idle-time-seconds | netty-websocket.writer-idle-time-seconds |
allIdleTimeSeconds | {prefix}.all-idle-time-seconds | netty-websocket.all-idle-time-seconds |
配置favicon的方式与spring-boot中完全一致。只需将favicon.ico
文件放到classpath的根目录下即可。如下:
src/
+- main/
+- java/
| + <source code>
+- resources/
+- favicon.ico
配置自定义错误页面的方式与spring-boot中完全一致。你可以添加一个 /public/error
目录,错误页面将会是该目录下的静态页面,错误页面的文件名必须是准确的错误状态或者是一串掩码,如下:
src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
| +- 5xx.html
+- <other public assets>
@ServerEndpoint
、@Component
注解即可ServerEndpointExporter.getInetSocketAddressSet()
获取所有端点的地址ServerBootstrap
实例ServerBootstrap
实例"0.0.0.0"
,因为"0.0.0.0"
意味着绑定所有的host此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。