系统通知、 聊天服务的实现
用户信息用user1@ip1, user2@ip2表示。 后面的消息存储db是公共的。
1)用户登录时主动拉取信息, server将该用户的离线信息发给用户
2)同server中, 不同用户传递消息时, server将收到的其他用户发来的消息直接存储并发给该目标用户、无需判断发送是否成功。 不成功则表示用户连接异常了, 下次再连上时,目标用户能主动拉取到。【保证了任何情况下不会丢掉消息】
3)user1通过server1转发给server2的user2时,server1收到时即存储, 然后server1转发给server2; 如果转发成功,则由server2执行步骤2负责最终的投递;server2投递成功,user2就能看到最新;否则user2离线、下次再登陆依然能看到。【也保证了任何情况下不会丢掉消息】
这种要求server之间能全互通、且全互连接了。 不支持server之间的多次relay、不支持第三方server。
可能问题:
1) 写可能成为瓶颈。在db前端加cache、数据慢慢由cache写到db中; 查询时合并db结果和cache结果。
2)群聊、群通知(几十、几百的规模)。server逐个给群中每个人发、或者发给其他server转发。【信息的存储是以群为单位】
3)全服系统通知(几万、几十万规模、或者腾讯几亿规模? 几亿也是分解到了一个服务器能支撑的量, 约几w或者几千!!):可以短时间内全部逐个发、或者分时发减慢影响。 全服系统通知可以使用内存存放,整个就没多少数据。避免后端db的查询。【信息的存储以全服为单位、独此一份】
4)有时序问题? server2收到消息msg1,查询知user2未上线,准备写db/cache; 写之前user2上线了并主动获取离线消息、但得到的是不包含msg1的离线消息。 msg1在这次登陆中被漏掉了。? server先写cache/db, 再判断是否用户在线而发送;这样OK。
5)有可能有多次relay的需求? 或者relay之后的server也有存储的需求? cache只是减少写压力; 读依赖于mysql本身的缓存机制。
每个模块负责自己的事情、把自己的事情做好, 能够向外承诺模块自己的责任; 模块也能信任其他模块声称的职能。
模块间的功能和职责划分明确, 否则模块之间互相不能信任,考虑的东西太多太复杂, 无法达成简洁、清晰的设计。
略 仿xmpp
http://wiki.jabbercn.org/Jabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E7%AE%A1%E7%90%86%E6%8C%87%E5%8D%97
https://github.com/jabberd2/jabberd2
http://zh.wikipedia.org/wiki/XMPP%E5%8D%94%E8%AD%B0%E4%BC%BA%E6%9C%8D%E5%99%A8%E8%BB%9F%E9%AB%94%E5%88%97%E8%A1%A8
系统通知、 聊天服务的实现相关推荐
- 老雷socket编程之PHP利用socket扩展实现聊天服务
老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streams sockets socket_create(AF ...
- 基于Trtc的内贸站视频聊天服务
基于Trtc的内贸站视频聊天服务分享 说到视频聊天,大家第一个想到的是啥,QQ! 其实最早的视频聊天工具应该是 : Netmeeting(我能找到的最早聊天工具) Netmeeting是Windows ...
- D1net阅闻:亚马逊引入Biba的员工和专利,据称计划推出新的视频聊天服务
亚马逊引入Biba的员工和专利,据称计划推出新的视频聊天服务 亚马逊收购Twitch和Elemental Technologies似乎只是公司战略的两个部分,计划通过收购进行更深入的视频服务.去年,亚 ...
- [导入]Web聊天:八个优秀的网页聊天服务
可能很多人认为在网页上进行沟通是无益的,当然,我们做为个人博客又或个人站点,自然是有充分的自由,我爱聊不聊,没人管得着.但是有个问题我已经思考了很久,为什么国内那么多的垃圾在线聊天服务商能存活呢?他们 ...
- 关于启动聊天服务(Linux系统)--龙兵AI名片
Linux系统环境检测 Linux系统可以使用以下脚本测试本机PHP环境是否满足WorkerMan运行要求. curl -Ss http://www.workerman.net/check.php | ...
- Qt学习心得之网络编程简单的局域网聊天服务端建立
学而不思则罔,思而不学则殆.学习和思考是相辅相成的,通过这几天对网络编程的学习,收获颇丰.接下来我将利用Qt做的一个以TcpIp协议为传输方式的简单的局域网聊天服务端与大家分享下: 首先谈谈我个人对T ...
- IM即时通讯设计----聊天服务(附源码)
来源:微信公众号「编程学习基地」 文章目录 IM即时通信程序设计 IM即时通讯 设计一款高并发聊天服务需要注意什么 如何设计可靠的消息处理服务 什么是粘包 什么是半包 解决粘包和半包 IM通信协议 应 ...
- linux写聊天程序,轻易实现基于linux或win运行的聊天服务端程序
对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完全得益于m ...
- 在ubuntu上实现基于webrtc的多人在线视频聊天服务
最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...
最新文章
- 院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板
- 拼多多出现大Bug:100无门槛券随便领,一晚损失200亿
- [渝粤教育] 西南科技大学 基础工业工程 在线考试复习资料
- 数据压缩 第二次作业
- SpringBoot 自带工具类~StringUtils
- mssql2008极占内存
- pythonclasses_Python中的Classes和Metaclasses详解
- 玩转你的AlphaGo(MAC OS)
- 在Ubuntu系统下进行引导修复
- VPP-20.09版本安装教程(离线版)
- RISC-V MCU将常量定义到指定的Flash地址
- 解决windows 中python打开文本文档乱码问题
- 解决iText 5.0.1,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'
- 怎么看python是64位还是32位_怎样查看python是64位还是32位
- 梦幻手游最新服务器,梦幻西游手游最新服务器合服公告 5月11日合服一览
- Android Studio Electric Eel | 2022.1.1 发布,快来看看有什么大更新吧
- 恒生电子实习记录-2
- 运行应用程序,提示无法正常启动(0xc000007b)的解决办法
- 拓展SOUI中SImRichEdit控件的视频OLE控件(VideoOle)
- Docker中latest标签引发的困惑