netty-socketio 学习资源
初级教程,也是源码git项目推荐的demo
因为没有guide,所以只能多看项目,一下是在网上参考的一些项目,给了我很大的帮助:
- Spring Boot实战之netty-socketio实现简单聊天室(给指定用户推送消息)
- git 上的一个用了分布式和分布式锁的 NettySocketServer 该类MySocketIOServer是比较重要的一个类
- Spring Boot实战之netty-socketio实现简单聊天室
- 配置
com.corundumstudio.socketio.Configuration
并实例化SocketIOServer server = new SocketIOServer(config)
。 - 通过
com.corundumstudio.socketio.annotation.OnConnect
等注解 来实现监听socket连接、断开、接收消息等。然后通过依赖注入new SpringAnnotationScanner(SocketIOServer socketIOServer)
,通过该类来扫描@OnConnect
,OnEvent
等注解,注册正真的监听器。 - 当然了,也可以通过
Configuration.setXxxListener
和SocketIOServer.addEventListener
来注册监听器,算是2步骤的扩展。 - 最后客户端就可以通过
io.connect('http://localhost:9090?token='+userName);
来连接到socket,然后就可以通信了。因为NettySocketIO是通过集成socket.io
这个库来实现socket的,所以客户端语言不限,但是必须也要使用socketio的库,socketio官网
Namespace
:Namespace implements SocketIONamespace
。而且也是SocketIONamespace
的唯一实现,SocketIOServer中声明了它的实例mainNamespace
,里面保存了 所有的监听器、所有的客户端、客户端与Room的对应关系等数据,可以说他保存着SocketServer的用户所有信息。Namespace都会有一个名字,新创建一个Server的时候,都会默认创建一个名字为""
的Namespace。NamespaceHub
:SocketIOServer
中有它的一个实例,叫namespaceHub
。保存了该server的所有Namespace
(虽然现在还不知道第二个create第二个Namespace用来干什么)和 该Server的配置- room : 房间。
NettySocketIO
已经提供了房间的功能。可以通过String 类型的房间名来给所有在该房间里的所有用户发送消息。可以通过socketIOClient.joinRoom("room1");
来加入房间,也可以通过SocketIOServer.getNamespace(xx).joinRoom()
方法加入房间。房间信息,主要就保存在Namespace
的roomClients
和clientRooms
中。默认的所有用户都会进入 Namespace.DEFAULT_NAME(""),可以理解为是大厅房间。 BroadcastOperations
: BroadcastOperations 就是一个广播器,里面保存了SocketIoClient的列表和StoreFactory(暂时认为是一个发布消息的类),所以如果想给某一类用户发消息,就可以把这类用户放入到这个类的实例中,然后一起发送。给某个房间的所有用户发信息server.getRoomOperations("roomName").sendEvent()
参考
https://www.xncoding.com/2017...
https://blog.csdn.net/u014635...
https://github.com/root-wyj/s...
https://github.com/wangnamu/N...
https://github.com/dolyw/Proj...
版本问题:https://blog.csdn.net/qq_4173...
https://github.com/Heit/netty...
https://github.com/mrniko/net...
https://github.com/hiwepy/soc...
https://developer.aliyun.com/...
官方https://socket.io/
https://github.com/mrniko/net...
https://github.com/socketio/e...
https://github.com/trinopoty/...