用户信息用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

系统通知、 聊天服务的实现相关推荐

  1. 老雷socket编程之PHP利用socket扩展实现聊天服务

    老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streams sockets socket_create(AF ...

  2. 基于Trtc的内贸站视频聊天服务

    基于Trtc的内贸站视频聊天服务分享 说到视频聊天,大家第一个想到的是啥,QQ! 其实最早的视频聊天工具应该是 : Netmeeting(我能找到的最早聊天工具) Netmeeting是Windows ...

  3. D1net阅闻:亚马逊引入Biba的员工和专利,据称计划推出新的视频聊天服务

    亚马逊引入Biba的员工和专利,据称计划推出新的视频聊天服务 亚马逊收购Twitch和Elemental Technologies似乎只是公司战略的两个部分,计划通过收购进行更深入的视频服务.去年,亚 ...

  4. [导入]Web聊天:八个优秀的网页聊天服务

    可能很多人认为在网页上进行沟通是无益的,当然,我们做为个人博客又或个人站点,自然是有充分的自由,我爱聊不聊,没人管得着.但是有个问题我已经思考了很久,为什么国内那么多的垃圾在线聊天服务商能存活呢?他们 ...

  5. 关于启动聊天服务(Linux系统)--龙兵AI名片

    Linux系统环境检测 Linux系统可以使用以下脚本测试本机PHP环境是否满足WorkerMan运行要求. curl -Ss http://www.workerman.net/check.php | ...

  6. Qt学习心得之网络编程简单的局域网聊天服务端建立

    学而不思则罔,思而不学则殆.学习和思考是相辅相成的,通过这几天对网络编程的学习,收获颇丰.接下来我将利用Qt做的一个以TcpIp协议为传输方式的简单的局域网聊天服务端与大家分享下: 首先谈谈我个人对T ...

  7. IM即时通讯设计----聊天服务(附源码)

    来源:微信公众号「编程学习基地」 文章目录 IM即时通信程序设计 IM即时通讯 设计一款高并发聊天服务需要注意什么 如何设计可靠的消息处理服务 什么是粘包 什么是半包 解决粘包和半包 IM通信协议 应 ...

  8. linux写聊天程序,轻易实现基于linux或win运行的聊天服务端程序

    对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完全得益于m ...

  9. 在ubuntu上实现基于webrtc的多人在线视频聊天服务

    最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...

最新文章

  1. 院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板
  2. 拼多多出现大Bug:100无门槛券随便领,一晚损失200亿
  3. [渝粤教育] 西南科技大学 基础工业工程 在线考试复习资料
  4. 数据压缩 第二次作业
  5. SpringBoot 自带工具类~StringUtils
  6. mssql2008极占内存
  7. pythonclasses_Python中的Classes和Metaclasses详解
  8. 玩转你的AlphaGo(MAC OS)
  9. 在Ubuntu系统下进行引导修复
  10. VPP-20.09版本安装教程(离线版)
  11. RISC-V MCU将常量定义到指定的Flash地址
  12. 解决windows 中python打开文本文档乱码问题
  13. 解决iText 5.0.1,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'
  14. 怎么看python是64位还是32位_怎样查看python是64位还是32位
  15. 梦幻手游最新服务器,梦幻西游手游最新服务器合服公告 5月11日合服一览
  16. Android Studio Electric Eel | 2022.1.1 发布,快来看看有什么大更新吧
  17. 恒生电子实习记录-2
  18. 运行应用程序,提示无法正常启动(0xc000007b)的解决办法
  19. 拓展SOUI中SImRichEdit控件的视频OLE控件(VideoOle)
  20. Docker中latest标签引发的困惑

热门文章

  1. Caffe代码导读(1):Protobuf例子
  2. Spring松耦合的实现
  3. Git提交到多个远程仓库
  4. Apache Mahout 简介 通过可伸缩、商业友好的机器学习来构建智能应用程序
  5. 机器学习中的范数规则化之(二)核范数与规则项参数选择
  6. linux系统结构,文件寻址,文件管理编辑,正则表达式
  7. mysql之 double write 浅析
  8. objective-c 多媒体 音乐播放
  9. 【转】深入剖析iLBC的丢包补偿技术(PLC)
  10. 转载:Hyper-V管理器和SCVMM 2008 R2区别