0%

《Anywherectl开发笔录》Anywhere开发第二天

listener与server之间的心跳

server可以连接到多个listner,也就是要维护多个连接,每个连接都要间隔性的心跳

让server知道各个listner还活着,如果ping不同,则再尝试10次,如果还是不同,则关闭并丢弃这个连接

server的优雅退出

server退出时需要先关闭与各个listner之间的长连接,并且要关闭TCP server

协议的改进

统一了各个方向的传输报文协议,便于统一处理。

修复一个协议设计bug(参数长度不应该是32字节,太大浪费带宽,4个字节足以)

发送数据包的效率提升

每一次write、read都是一次IO操作(不用缓存的话),所以应当尽量减少write、read操作

协议中的内容先构造好,最后一次性write

业务包数据量太大怎么办,需要实时传输怎么办

TCP连接一次单向的数据包大小有限,如果要传输的数据量太大,则需要分多次发送数据

如果所有数据不经过指定协议进行拆分chunk然后合并chunk的操作,而仅仅是连续传输,那么,在连续传输过程中,这个连接就被独占,无法传输其他数据包

所以需要设计一个chunk拆分协议,来保证TCP连接的多路复用

大概思路:chunk协议头中有一个该业务包的唯一id、时间戳等等,首先a向b发送setChunkSize指令协商chunk的大小,然后a端进行数据拆分,一个个包向b发送,每个包都含有chunk协议头,b收到数据包后按照chunk协议头以及商定好的chunk size对数据包重新组装

具体后续开发中进行设计

server单点问题

server单点可以满足个人使用,但是如果很多人使用,必然会出现瓶颈

大概思路:

  1. 新增一个组件 serverlookup(可以多开做负载均衡),开启http服务器。server启动后向每个 serverlookup 注册,listener连接serverlookup获取最空闲的server,然后连接server,然后listener将server地址告知client,client就连接这个server对此listener进行操控

Github链接

https://github.com/pefish/anywherectl

欢迎一起开发




微信关注我,及时接收最新技术文章