simple-starter-socketio
# 简介
长链接通讯自动装配类,集群使用redis订阅及广播机制,若无redis配置则自动单机化
# 引入依赖
<dependencies>
<dependency>
<groupId>cn.iosd</groupId>
<artifactId>simple-starter-socketio</artifactId>
<version>Version</version>
</dependency>
</dependencies>
2
3
4
5
6
7
# 配置项
simple:
## 若无redisson配置则自动单机化
redisson:
#分布式锁 缺省项为false
enabled: true
type: standalone
address: 127.0.0.1
password: password
database: 0
## simple-starter-socketio
socketio:
#长链接通讯及集群 缺省项为false
enabled: true
port: 12010
upgradeTimeout: 1000000
pingTimeout: 6000000
pingInterval: 25000
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 功能项
# 权限认证
实现AuthorizationListener
示例
@Slf4j
@Configuration
public class SocketIOAuthorization implements AuthorizationListener {
/**
* 连接Url:http://localhost:12010?room=1003&token=1003
*
* @param data
* @return
*/
@Override
public boolean isAuthorized(HandshakeData data) {
String token = data.getSingleUrlParam("token");
String room = data.getSingleUrlParam("room");
log.info("socket认证参数: token={}, room={}", token, room);
if (StringUtils.isEmpty(token) || StringUtils.isEmpty(room)) {
log.error("socket认证失败, 参数不符合要求: token={}, room={}", token, room);
return false;
}
return true;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 测试页面
源码路径:
src/main/resources/static/socketio.html
连接示例:
http://localhost:12010
带群聊Room
http://localhost:12010?room=101
带权限
http://localhost:12010?room=101&token=101
多群聊Room
http://localhost:12010?room=101,102&token=101,102
指定微服务
http://localhost:12010?applicationName=pure-demo-socket
# 发送消息方法
注入使用
@Autowired
private SocketIOServer socketIoServer;
2
广播所有连接客户端
SocketIOMessageServer.sendBroadcast
仅发送带群聊Room连接的客户端
SocketIOMessageServer.sendRoom
发送带指定微服务连接的客户端
(注:会往连接applicationName参数为空的客户端发送msg)
可自动获取微服务名称并发送消息
SocketIOMessageServer.sendService
# 集群示例
# 测试room及token
启动 工程1:simple-demo-socketio-one 和 工程2:simple-demo-socketio-two
页面1连接工程1的socketio :http://localhost:12010?room=1001&token=1001
页面2连接工程2的socketio :http://localhost:12020?room=1002
接口调用工程1 发送消息以下消息,则页面1接收到数据
http://localhost:11040/message/room?message=test001&eventName=123&room=1001
接口调用工程1 发送消息以下消息,则页面2接收到数据
http://localhost:11040/message/room?message=test001&eventName=123&room=1002
接口调用工程1 发送消息以下消息,则页面1 页面2接收到数据
http://localhost:11040/message/broadcast?message=123
# 测试多群聊Room
启动 工程1:simple-demo-socketio-one 和 工程2:simple-demo-socketio-two
页面1连接工程1的socketio :http://localhost:12010?room=1001&token=1001
页面2连接工程2的socketio :http://localhost:12020?room=1002,1003
接口调用工程1 发送消息以下消息,则页面1接收到数据
http://localhost:11040/message/room?message=test001&eventName=123&room=1001
接口调用工程1 发送消息以下消息,则页面2接收到数据
http://localhost:11040/message/room?message=test001&eventName=123&room=1002
接口调用工程1 发送消息以下消息,则页面2接收到数据
http://localhost:11040/message/room?message=test001&eventName=123&room=1003
接口调用工程1 发送消息以下消息,则页面1 页面2接收到数据
http://localhost:11040/message/broadcast?message=123
# 测试带指定微服务连接的客户端
启动 工程1:simple-demo-socketio-one 和 工程2:simple-demo-socketio-two
页面1连接工程1的socketio :http://localhost:12010?room=1001&token=1001&applicationName=simple-demo-socketio-two
页面2连接工程2的socketio :http://localhost:12020?applicationName=simple-demo-socketio-one
接口调用工程1 发送消息以下消息,则页面2接收到数据
http://localhost:11040/message/service?message=23
接口调用工程2 发送消息以下消息,则页面1接收到数据
http://localhost:11050/message/service?message=2131