netty-socketio

netty-socketio 学习资源
初级教程,也是源码git项目推荐的demo

因为没有guide,所以只能多看项目,一下是在网上参考的一些项目,给了我很大的帮助:

  • Spring Boot实战之netty-socketio实现简单聊天室(给指定用户推送消息)
  • git 上的一个用了分布式和分布式锁的 NettySocketServer 该类MySocketIOServer是比较重要的一个类
  • Spring Boot实战之netty-socketio实现简单聊天室
基本使用 【netty-socketio】这里总结一下NettySocketIO的基本使用,只是说一下大概流程,具体细节实现看代码:
  1. 配置com.corundumstudio.socketio.Configuration 并实例化 SocketIOServer server = new SocketIOServer(config)
  2. 通过com.corundumstudio.socketio.annotation.OnConnect 等注解 来实现监听socket连接、断开、接收消息等。然后通过依赖注入 new SpringAnnotationScanner(SocketIOServer socketIOServer) ,通过该类来扫描@OnConnect, OnEvent等注解,注册正真的监听器。
  3. 当然了,也可以通过 Configuration.setXxxListenerSocketIOServer.addEventListener 来注册监听器,算是2步骤的扩展。
  4. 最后客户端就可以通过 io.connect('http://localhost:9090?token='+userName); 来连接到socket,然后就可以通信了。因为NettySocketIO是通过集成socket.io这个库来实现socket的,所以客户端语言不限,但是必须也要使用socketio的库,socketio官网
NettySocketIO是一个开源框架,非要说什么官网的话 怕就是上面说到的他的git地址了。而且自己去找NettySocketIO的使用DEMO也是少的可怜,文档更是没有,所以只能自己去研究了。博主通过研究NettySocketIO源码,总结以下:
  • 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()方法加入房间。房间信息,主要就保存在NamespaceroomClientsclientRooms中。默认的所有用户都会进入 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/...

    推荐阅读