蘑菇街开源的teamtalk可以作为2-3年初学者学习之用,或者小型公司当作内部im办公交流之用。至于源码讲解,网上开源的挺多。迷茫且闲着没事的初学者们可以简单看看,看网络框架大概一天可以看明白,看业务,大概需要一到两周,需要去centos7.0以上部署下,msgserver可以看完代码配置2个试试,调试。客户端代码也可以简单看看。还是有一定价值的,像网络框架通用,简单,没有过多炫技,且业务逻辑简单实用,数据表的设计,我之前调试的时候,里面是缺了一张表,具体那张表记不太清了。不过不影响大局。通信协议用的是protobuf,简单搞笑,虽然可视化程度不够,但取舍之下相对于后端来说,protobuf前后兼容(此处可以看看为啥兼容),各个语言都支持,使用起来也简单。

可供学习的点,大概如下几点:

1:网络库设计包括定时器设计,消息队列设计,超时处理这里。

2:protobuf使用学习,logserver里面的http解析代码可以简单看看。

3:整体逻辑架构设计,业务设计,数据表设计。

4:一个用户退出登录服务器这里如何处理可以简单看看。

可优化的点,大概有如下几点:

1:里面的网络框架,大多是单进程单线程服务,虽说可以部署多进程,但难免消耗资源,且配置文件搞起来也比较麻烦。此处可以修改为类似muduo这种的,单线程处理网络收发包,多线程处理消息队列(此处可以后续接着探讨网络库如何设计),或者直接修改teamtalk的源码,单线程接受fd,多线程处理网络收发包以及具体消息业务逻辑。

2:日志模块,teamtalk里面用的日志是log4,之前搞客户端的时候市面上倒是有一些公司,用的是log4,服务器来说倒是少见。日志模块,不清楚底层实现,容易出问题,自己写个日志模块倒是也不难,此处建议自己写用来替换。市面上有两种日志模块设计方法:1:直接同步写,这样设计逻辑简单,但多线程写容易乱序且会对同步线程造成损耗。2:异步写,抛到线程里,用任务队列去消费日志,可以先写缓存,再写磁盘。且任务队列大小要做限制,日志一条长度也要做限制,一个日志文件大小也要做限制。市面上也有两种日志存储形式:1:在当前服务log目录下,2:在系统某个目录下。此处仁者见仁,智者见智。还有一些公司日志文件分为三种:error,debug,sys,这样会导致日志分散,不易于查找问题。不建议这种存储方法。简单写写自己玩玩倒是可以,网上也有类似代码。不作赘述。

3:最重要的设计上面的缺陷在于单点routeserver,此处作为存储所有用户关系的缓存服务以及数据转发服务,后端来说,单点一旦崩溃,整个程序无法运行。此处可以修改为用户关系存在redis里,最好搞一个redis集群模式,具体集群如何设计网上有文章可以查到。且群用户在线这里可以搞一个redis hash key设计,key为群号。redis 集群99.99%的可靠性。转发还是在routeserver这里。msgserver这里转发之前去查找群用户具体在那台机器上,然后定向转发,避免浪费网络带宽,此处做一次查询,也提高效率。

4:图片,以及文件管理这里,这里直接磁盘存储文件图片,如文件过多,会导致读取效率,磁盘io大幅变低,此处可以搞个什么分布式的小文件管理系统或者数据库啥的。具体啥,网上应该也一大堆文件,可以简单了解下。

5:消息缓存设计,此处可以添加redis 集群或者ldb作消息缓存,以防止消息过多,mysql爆掉,mysql可以搞个主从啥的,防止丢数据。

6:loginserver设计,此处负载均衡设计,可以搞一个类似nginx这样的dns负载,或者lvs之类的,大多都是配置域名登录,然后域名解析作负载均衡处理这样。

本人qq交流群:242598595。有啥商榷之处,可以交流探讨,常年不定时在线。

在转载此站点文章时,希望可以声明原作者 ,感谢。

浅谈teamtalk相关推荐

  1. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  2. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  3. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  4. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  5. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  6. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  7. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  8. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  9. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

最新文章

  1. C语言 string.h 中函数的实现
  2. linux用户态驱动--VFIO(一)
  3. mybatis-plus自定义mapper报org.apache.ibatis.binding.BindingException: Invalid bound statement(not found)
  4. 使用FormData进行Ajax请求异步上传图片案例
  5. print的describe的展示全部数据_大数据项目中的QA需要迎接新的挑战
  6. python文件夹目录_Python 操作文件、文件夹、目录大全
  7. CSS 处理溢出 overflow属性
  8. java.io.IOException: Server returned HTTP response code: 411 for URL
  9. protobuf(Protocol Buffers)java初体验
  10. Android 代码混淆之部分类不混淆的技巧
  11. SAXReader的使用
  12. 统计调查制度申请流程和申请书公文模板
  13. oracle 去空格函数未生效,发现ASCII值为49824的字符
  14. aizu 0121 Seven Puzzle
  15. 致敬柳传志三网合一的佳沃品牌之路
  16. S3C2440之液晶屏LCD驱动
  17. 2022年乡村医生考试精选复习题及答案
  18. Jzxx.oj:4068: 数组元素的查找新
  19. html 全屏撒花的效果,微信里怎么实现撒花效果?
  20. deepin 下 WPS for linux字体显示问题[已解决]

热门文章

  1. 3 WOW的各种文件的格式(WOWMapView Group)
  2. 广东工业大学第12届ACM程序设计大赛 Problem H: tmk买礼物
  3. macbook上好用的解压软件_全能解压 Mac下最好用的解压缩软件
  4. 路由器交换机升级操作系统(导IOS)
  5. day24.open 打开文件操作
  6. 液晶显示器点屏方法步骤及参数表
  7. 淘宝放大镜插件(vue-piczoom)
  8. canvas 烟花特效
  9. 【数据结构】数据结构三要素
  10. 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)