`
hw999
  • 浏览: 49197 次
文章分类
社区版块
存档分类
最新评论

求教:可组合的网络协议设计与实现

 
阅读更多
赖勇浩(http://laiyonghao.com)
最近在折腾项目在腾讯开放平台的上线问题。其中有一点是网络协议的设计与实现。应用层协议很容易解决:我们使用 google protobuf 的 RPC。一开始,我们直接在 TCP 协议之上实现的,随着以下 3 个需求的出现,我的麻烦大了:
1、服务器应用运行在腾讯云计算服务器时,需要接入 TGW(见 http://wiki.open.qq.com/wiki/TGW),这需要对我们的应用协议进行改造;
2、腾讯云计算的服务器只能开放 8001-8010 总共 10 个端口给应用服务器程序,申请开放更多端口是非常麻烦的,所以需要自己实现一个端口转发(PF)协议;
3、作为一个网游,客户端和服务器端的通信必须加密,所以需要实现安全协议(SEC)。


这些协议都很简单,实现起来也在我的能力范围之内,所以今天请教大家不是怎么实现端口转发,或者如何设计通信的加解密;而是当这些协议和开发和运营场景结合起来时需要实现以下 6 个组合(见上图):

6、基于 TCP 的 RPC,防火墙内的多个应用进程间通信用;
5、带加密的基于 TCP 的 RPC,开发期或在非腾讯平台运营时用;
4、带端口转发的加密的基于 TCP 的 RPC,应用场景同上;
3、在 4 的基础上加上 TGW 协议;部署在腾讯云计算正式运营时用;
2、在 5 的基础上加上 TGW 协议;
1、在 6 的基础上加上 TGW 协议。
以上的协议中,3、4、6 是我们马上就要用到的。
当然,实现的时候,我可以自己手动写 6 个协议类,然后根据使用场景实例化合适的类给 RPC 作为传输层协议使用就可以了。但作为对程序设计有点追求的人,我希望能够只是设计 TGW、PF、SEC 3 个类,然后在使用时进行组合。如何设计这 3 个类,就是我今天想请教大家的问题。
再补充几点:设计的方案最好能够比较方便地用几种语言实现,就我们项目而言,至少要方便使用 Python 和 ActionScript 3 实现。
以上是问题的描述,欢迎大家一起探讨,谢谢大家。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics