Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • IM的学习历程

    post by onelong / 2016-8-11 16:59 Thursday [工作]

    最近闲下来想起在虚拟机上部署一年前部署过的企业级的即时通讯方案-TeamTalk,很辛苦的折腾了两天终于部署成功了,一年前糊里糊涂的部署在阿里云上,一年后阿里云过期了,不想续费了。这次部署和上次部署不同的地方在哪里呢,我已经不需要官方提供的文档了,自己构建服务器编译环境,在ubuntu 16.04,内核4.4.0,gcc 5.4上编译通过,还升级了php7.0。说这些有什么用呢,其实我就想说的是时间是最好的催化剂,无意间见证了成长。很多时候很迷惘,学这些东西,学那些东西有什么用呢,短期内能见效很快的就是考试了,大学里面考试前一晚努力点,哪怕你一个学期没上课,都可以考试及格。知识积累过程,量变到质变的过程通常是漫长的,折磨人的。炒股里面经验有人说,投资是一场修行。学习也是一样,没有达到一定基础积累,短期是没有明显的效果的。在开始学习TeamTalk之前,我曾经研究过在一份java即时通讯的代码,当时看那个代码一头雾水,当时听说它能支撑100w用户在线,我觉得很有意思,因为不曾有这样的机会去见识一下。经过一段时间的学习,分拆,最后我折腾了一份只有IM的代码,去掉了分布式消息路由,去掉了分布式存储和mongodb,用HashMap代替了,还用netty4重新写了一部分,源码地址:https://git.oschina.net/onelong/IMBase.git 后来在某种情况下得知了TeamTalk,折腾了1个星期,也将TT部署到阿里云上了。那时候很有心想做个自己的IM,却无力去研究那些c++代码,后来将基础代码弄到Xcode上面运行,开始熟悉了部分流程了,但是后来还是觉得太吃力了,不会改c++,也不懂它是怎样的协议。对于Google protobuffer 也不熟悉,源码地址:https://git.oschina.net/onelong/TTBase.git,后来去深圳带项目了,也就放下了。在去深圳之前,我自己封装了一个整合了一个android的网络库,也就是现在项目用的网络库,volley+okhttp还有图片加载的,https://git.oschina.net/onelong/Mylibs.git 本地还有部分修改,没做同步。项目差不多做完的时候,公司说要自己做android的推送,我又开始研究DDpush,大约花了2个星期吧,又熟悉了整个推送的协议,优缺点等,https://github.com/OnelongX/DDPush.git,并成功弄了一个demo,在做demo的过程还研究了别人的流氓常驻方案,不过那些方案在android5或者android6上都失效了,这次快速熟悉还是得益于之前对即时通讯的研究。由于项目推进不达预期,目前推送方案还没有正式在线上使用。之后的一段时间在折腾c++11和linux网络,在强大的clion和cmake帮助下,研究了一个简单基础开源网络库handy,https://github.com/OnelongX/handy.git 大约一个月的时间吧,基本熟悉了Linux高性能网络的要点,异步+事件驱动+多线程,也是这样渐渐的理解nginx的配置参数了。经历了这些,做完看TT服务器的基础代码,发现如此的简单,没有以前觉得用c++特别神奇的感觉。各个流程基本都是可以猜出来,例如怎样解析协议的,TT的协议是16B头+protobuffer序列化的body,通过长度协议分包。既然提到了Google protobuffer,我有必要说一说这个神奇的序列化工具,当代游戏通讯,IM,RPC等都大量使用了它,有兴趣的可以自行了解,我相信你会有一番收获的。
    学习在与坚持,发现了一个有兴趣的事物,迅速的学习它并掌握它,而不是等或者看过了就算了。很在东西在深挖细节之后才会自己的不足,学得越多,越会发现自己的更多不足。学然后知困。学会争取机会锻炼,而不是一副事不关己的样子,错过每一个成长的机会。很多时候,别人写的代码没有问题,自己抄着写都会有问题,为什么呢?因为不知道细节和本质,有经验的人在写的时候就避免了。

    引用地址:
     

    我要评论