有问题欢迎讨论,群聊广播

架构图

https://blog.csdn.net/qq_24137609/article/details/90693558

1、启动类注入Bean

public class IMApplication extends WebMvcConfigurerAdapter {static Logger logger = Logger.getLogger(IMApplication.class);@Autowiredprivate ChatConfig chatConfig;public static void main(String[] args) {SpringApplication.run(IMApplication.class, args);}@Beanpublic SocketIOServer socketIOServer() {Configuration config = new Configuration();config.setPort(chatConfig.getSocketRamPort());/*** 修复地址占用*/SocketConfig socketConfig = config.getSocketConfig();socketConfig.setReuseAddress(true);/*** 超时处理*/config.setTransports(Transport.WEBSOCKET, Transport.POLLING);config.setPingTimeout(11000);config.setPingInterval(3000);/*** 身份验证*/config.setAuthorizationListener(new AuthorizationListener() {@Overridepublic boolean isAuthorized(HandshakeData data) {String[] params = SymmetricEncoderUtils.AESDncode("AES", data.getSingleUrlParam("token")).split("\\_");if (params[params.length - 1] != null) {return true;}return false;}});final SocketIOServer server = new SocketIOServer(config);return server;}//扫描socket的方法@Beanpublic SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketIOServer) {return new SpringAnnotationScanner(socketIOServer);}
}

2、写一个启动类,并且实现CommandLineRunner方法

@Component
@Order(value = 1)
public class ServerRunner implements CommandLineRunner {private final SocketIOServer server;@Autowiredpublic ServerRunner(SocketIOServer server, MessageDispatcher messageDispatcher, ClientRunner clientRunner, ClientRunnerD clientRunnerD) {this.server = server;}@Overridepublic void run(String... strings) {server.start(); }
}

3、socket业务类(启动类有扫描器)

@Component
public class MessageEventHandler {/*** 建立长连接** @param client*/@OnConnectpublic void onConnect(SocketIOClient client) {//获取用户id参数//建立hashMap//把用户id作为key,client作为value存入}/*** 消息处理** @param client* @param data* @param ackRequest*/@OnEvent(value = "chat")public void onEvent(SocketIOClient client, ImMessageDetail data, AckRequest ackRequest) {chat 需要和前端对应//实体data接收前端数据//放入队列(点对点模式,结合routingKey,实现集群形式)//}/*** 断开连接** @param client*/@OnDisconnectpublic void onDisconnect(SocketIOClient client) {//下线清除,hashMap中这个client的记录(单条)}
}

4、队列取出数据,获取到目标人的client进行消息推送

5、可根据队列实现单聊的集群形式,横向扩展

netty-socketio -夜幕思年华相关推荐

  1. hive静态分区,动态分区 -夜幕思年华

    脚本数据 person.txt 夜幕1,china 夜幕2,china 夜幕3,china 夜幕4,china 年华1,India 年华2,India 年华3,India 年华4,India - 静态 ...

  2. rabbitmq安装 -夜幕思年华

    环境centos7 1.安装 socat yum install socat 2.更新erlang 2.1.卸载旧版本 yum remove erlang 2.2.下载新版本erl wget http ...

  3. java解决跨域 -夜幕思年华

    @CrossOrigin 1.指定类跨域 @CrossOrigin @RestController public class UserController {@RequestMapping(" ...

  4. mysql行转列 -夜幕思年华

    员工姓名(name) 排班日期(calendar_date) 排班内容(calss_name) 张三 2005-05-01 00:00:00 日班 张三 2005-05-02 00:00:00 日班 ...

  5. mapreduce-全局排序 -夜幕思年华

    脚本数据 生成随机数到文件 for k in $(seq 1 10000)doecho $RANDOM>>test_data.txt;done 创建目录 hdfs dfs -mkdir / ...

  6. Eureka高可用部署 -夜幕思年华

    Eureka 高可用 spring:application:name: EUREKA-HA --- 服务1 server:port: 8761 spring:profiles: peer1 eurek ...

  7. zookeeper傻瓜式集群搭建-夜幕思年华

    机器如下 序号 机器 类型 1 192.168.33.111 centos7 2 192.168.33.112 centos7 下载 http://mirror.bit.edu.cn/apache/z ...

  8. IM架构方案设计 -夜幕思年华

    最近做了一份IM整套体系,分享下整体架构方案,欢迎交流

  9. Netty SocketIO如何在客户端发起链接时验证token是否合法?

    直接上代码: socketIOServer.addConnectListener(new ConnectListener() {public void onConnect(SocketIOClient ...

最新文章

  1. Java项目:化妆品商城系统(java+Springboot+ssm+mysql+jsp+maven)
  2. 4.性能下降原因和常见的Join查询
  3. mysql执行语句_实时查看MySQL执行的语句
  4. ORACLE查询闪回
  5. 前端学习(2552):vue简介
  6. 不插网线终端缓慢的问题解决办法
  7. Matlab中矩阵编号方式以及一维二维三维数据间的相互转换
  8. 绘制柱状图,填充不同颜色
  9. 汽车电子设计之SBC芯片简单认识
  10. 【JS从入门到精通】09-数组
  11. python 学籍管理系统的简单实现
  12. Linux上配置BIP语言编译器及引擎
  13. 号码锁 Combination Lock [USACO1.4]
  14. ArcGIS教程:对镶嵌数据集进行色彩平衡
  15. iframe例子 (
  16. 中小型网站如何预防DDOS攻击
  17. Error: (vlog-7) Failed to open design unit file “d:/ethe
  18. 20P36 Premiere预设200个转场效果文字标题音效合集包
  19. 双ram口多模块存储器_RAM模块上的灰色小东西是什么?
  20. jgrid 多选 快捷键_Intellij IDEA史上最全快捷键大全

热门文章

  1. CentOS 7 网卡英特尔 Ethernet Connection I219-LM 驱动安装方法
  2. deepstream(deepstream python)
  3. 张墨千鸿蒙秘境,连接四界精魂之力 镇魔曲手游鸿蒙境副本展开新篇
  4. Win10|MySql5.7|中文乱码解决
  5. http://www.open-open.com/lib/view/open1322977704296.html
  6. 检测和处理异常值的极简指南
  7. E. Draw a triangle(计算几何+EXGCD)
  8. C语言程序设计实训教程-张玉生 张书月 朱苗苗/主编—实验14.4
  9. pyTorch学习基础案例一-熊猫图片切分
  10. 计算机网络技术专业环境评估,浅谈高职院校计算机网络技术专业教学环境建设...