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


    赖勇浩(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 实现。
    以上是问题的描述,欢迎大家一起探讨,谢谢大家。
  • 相关阅读:
    如何让在JAVA中定义常量池
    java常量池概念
    Efficient Counter in Java
    看到关于JS线程的两篇文章
    Java Collection
    java学习书籍介绍--csdn上一位前辈介绍
    myeclipse快捷键
    数组
    错误处理和时间函数
    函数01
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154311.html
Copyright © 2020-2023  润新知