mars.png


这篇全部分析一下Mars中所有的功能,看完有一个大概的了解。mars中有一些服务端的应用函数,但是其他大部分是客户端线程,锁,数据形式,闹钟的函数


一.comm包

crypt包含加密方法,ibase64.cc和AES-256-ECB解密(pkcs7paddingg) 

dns中有GetHostByName等函数

messagequeue中有对发送,取消释放,运行消息队列等函数

network中是关于路由,dns,网关的一些操作,暂时没看出有什么用来。因为这在客户端、服务端都没有用到的地方,其中local_routetable.cc中有一句这样的话:

// code modified from https://opensource.apple.com/source/network_cmds/network_cmds-457/netstat.tproj/route.c

// output like `netstat -nlr`

貌似就是输出类似于netstat那样的信息。

socket中有较多重要的类,比如tcpserver.cc,tcpclient.cc,udpserver.cc,udpserver.cc的函数,貌似这个应该用在服务端,因为客户端没有必要有这么多socket的操作函数。

unix/socket中有socket的许多poll方式

xlogger是日志的打印相关。


二.sdt包

activecheck其中是http,dns,ping,tcp相关的活性检查

checkimpl像是活性检查的具体实现,比如可以得到域名下的所有ip,socket_gethostbyname,


三.stn包

最重要的是用tcp实现的长连接,短连接,flow_limit.cc像是说唱音乐里的flow了。心跳函数。weak_network_logic弱网络。


而且mars的函数风格都是工业级别的,看起来实在是要花一些脑筋,其他没有什么,可以推断微信服务端也是一些epoll模式的处理,同时,把许多服务分配到不同服务器上是其难点,只在一台服务器上实现相关功能挺简单的,一组服务器群就有些难度了。