IM服务器:我的千万级在线聊天服务器集群
一、服务器特点
01、傻瓜式部署,一键式启动;
02、单机支持10万以上在线用户聊天(8G内存,如果内存足够大,并发量可超过10万);
03、支持服务器集群,集群间高内聚、低耦合,可动态横向扩展IM服务器,最大支持200台IM服务器的集群;
04、高并发、高稳定性;
05、支持群组聊天;
06、IM业务完全独立:只需uid(用户id)和gid(群组id),可方便的将IM业务集成到上层业务中;
07、内置HTTP访问接口,用于查询用户状态(上线/离线);
07、基于websocket协议,轻松实现网页端开发;
09、访问安全支持;
10、服务器体积小,不依赖任何第三方库和中间件,服务器集群只有三个文件,不到500K;
11、提供外部接口用于处理离线消息;
12、开发成本低,基于websocket协议,消息体为json格式,用户可扩展自己的消息字段;
二、技术特点
01、实现自主内存管理,避免内存碎片的产生;
02、采用IOCP模型,充分利用CPU多核性能,支持高并发,IO业务处理完全异步;
03、采用“无锁”化设计,IM服务器内部只有一把锁;
04、内部大量采用HASH表进行数据管理,查询速度实现O(1);
05、采用红黑树进行定时器管理;
06、严格的网络异常处理,防止高并发下内存访问异常;
三、服务器集群程序介绍
1、imserver.exe
概要介绍:IM通信服务
默认端口:8210
功能说明:
1、转发用户间的点对点消息;
2、转发群组消息;
3、群组的创建、销毁以及将指定用户加入到指定群组;
如果在线用户数量超出单台imserver的配置,则需要建立IM服务器集群,不同的用户会登录在不同的IM服务器上。 在集群模式下,需要importal.exe和improxy.exe程序的支持。
假设一台imserver支持10万用户,你的上层业务需要支持百万级在线聊天,则需要10台IM服务器。此时这10台服务器 的管理和通信需要如下两个服务支持。
2、importal.exe
概要介绍:负载均衡服务
默认端口:8510
功能说明:
1、实时更新集群中所有聊天服务器上的用户状态(在线、离线);
2、提供HTTP接口,用于查询集群中所有IM服务器的地址,以及当前每台服务器上在线用户数;
3、提供HTTP接口,用于查询指定用户的在线状态;
使用说明:
1、上层业务通过“/importal/getimserverlist.do”接口获取集群中所有IM服务器列表;
2、根据当前IM服务器上登录的用户数量,来决定用户登录到哪台IM服务器上;
3、improxy.exe
概要介绍:消息转发服务。
功能说明:
1、连接importal服务,获取集群中所有imserver服务器地址;
2、转发登录在不同imserver服务器上的用户消息和群组消息;
四、如何建立IM服务器集群
只需一分钟,一个配置项。
1、部署importal服务,双击importal.exe即可。
2、配置imserver上的imconfig.ini文件
通过imconfig.ini配置文件中的PortalServer字段设置portal服务器的地址。如:PortalServer=127.0.0.1:8510。
imserver服务器启动会读取该配置项,并连接到importal服务上。
3、部署improxy服务,双击improxy.exe即可,improxy会通过importal获取所有IM服务器。
注意:imserver、importal、improxy最好分别部署在不同的服务器上。
五、演示地址
单机用户5万时的并发演示。

六、下载地址
IM服务器:我的千万级在线聊天服务器集群的更多相关文章
- STORM在线业务实践-集群空闲CPU飙高问题排查
源:http://daiwa.ninja/index.php/2015/07/18/storm-cpu-overload/ 2015-07-18AUTHORDAIWA STORM在线业务实践-集群空闲 ...
- 在线安装TIDB集群
在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...
- 单机千万级MQTT连接服务器测试报告
目标:测试创建1000万客户端连接到服务器端,服务器操作系统 Linux(任意一款发行版服务器版本).分别在两台硬件一样的服务器,其中一台用于服务器端运行,另一台用于创建千万客户端连接客户端机器.在硬 ...
- STORM在线业务实践-集群空闲CPU飙高问题排查(转)
最近将公司的在线业务迁移到Storm集群上,上线后遇到低峰期CPU耗费严重的情况.在解决问题的过程中深入了解了storm的内部实现原理,并且解决了一个storm0.9-0.10版本一直存在的严重bug ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 云计算之路-阿里云上:部分服务器未及时续费造成docker swarm集群故障
非常非常抱歉,由于我们的疏忽 —— docker swarm 集群中的 2 台服务器没有及时续费,造成在夜里0点被自动关机,从而引发整个 docker swarm 集群故障,造成今天凌晨 0:30 ~ ...
- 百万级高并发mongodb集群性能数十倍提升优化实践
背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采 ...
- Nginx(web服务器)与Tomcat(应用服务器)搭建集群
Nginx作为互联网最常用的web服务器,高性能的HTTP和反向代理使它经常作为Tomcat集群的方案.Nginx官方只支持使用HTTP协议的集成,但是如果你想使用AJP协议集成,可以使用阿里开源的n ...
- Apache(web服务器)与Tomcat(应用服务器)搭建集群
web服务器:Apache.Nginx.IIS等 应用服务器:Tomcat.JBoss.Weblogic等 现在web服务器和应用服务器其实界限已经不是太清晰了,大部分的应用服务器也包含一些web服务 ...
随机推荐
- Stage 1 项目需求分析报告
迷你商城后台管理系统-- 需求分析 1. 引言 作为互联网热潮的崛起,消费者们的普遍差异化,实体商城要想在互联网的浪潮中继续发展,就需要制定出针对用户以及消费者的消费习惯以及喜爱品种的消费方案.从而企 ...
- 【PHP数据结构】其它排序:简单选择、桶排序
这是我们算法正式文章系列的最后一篇文章了,关于排序的知识我们学习了很多,包括常见的冒泡和快排,也学习过了不太常见的简单插入和希尔排序.既然今天这是最后一篇文章,也是排序相关的最后一篇,那我们就来轻松一 ...
- [原创]OpenEuler20.03安装配置PostgreSQL13.4详细图文版
OpenEuler安装配置PostgreSQL 编写时间:2021年9月18日 作者:liupp 邮箱:liupp@88.com 序号 更新内容 更新日期 更新人 1 完成第一至三章内容编辑: 202 ...
- Spring Cloud Gateway 没有链路信息,我 TM 人傻了(上)
本系列是 我TM人傻了 系列第五期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...
- Windows系统中的SVN使用方法
Windows 下搭建 SVN(3.9版本)服务器 2018年08月11日 12:22:55 Amarao 阅读数 11984 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议, ...
- 对OOP的理解
OOP是面向对象编程Object Oriented Programming,特征分别是封装.继承.多态.抽象. 封装:封装是指将对象信息状态通过访问权限修饰符隐藏在对象内部,不允许外部程序直接访问,如 ...
- Cnblogs 主题2
洪卫:https://www.cnblogs.com/shwee/p/9060226.html https://sunhwee.com 1 #header{display:none;} /* 将默认的 ...
- 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)
1.简介 在前边的文章中窗口句柄切换宏哥介绍了switchTo方法,这篇继续介绍switchTo中关于处理alert弹窗的问题.很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭, ...
- JuiceFS v0.17 发布,通过 1270 项 LTP 测试!
小伙伴们大家好,JuiceFS v0.17 在国庆小长假来临之际如期发布了!这是我们在 2021 年秋季推出的第二个版本,让我们直奔主题,看看都有哪些新变化吧. 本次更新累计 80+ 提交,共有 9 ...
- C# 显示、隐藏窗口对应的任务栏
WPF中全屏窗口,会自动隐藏任务栏. 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏 ...