• 因为所有的网络消息在发送时候格式都是这样
  • 对于用Protobuf定义的每一消息类型class,都需要定义一个对应消息头code
  • 在发送的时候,先将消息体进行序列化,再将code进行序列化,进行组装发送
 //这个代码没有进行过优化,会产生严重GC,不要复制使用。这里只是作为演示static byte[] PackMsg(IMessage msg){byteCollection.Clear();var code = Dispatch.GetOpCode(msg.GetType());byteCollection.AddRange(BitConverter.GetBytes(code));byteCollection.AddRange(msg.ToByteArray());return byteCollection.ToArray();}
  • 我这里使用的code是ushort类型,只占用两个字节,用BitConverter可以方便转换

问题

  • 产生问题在于,protobuf是先定义.proto文件,然后根据这个文件来生成.cs文件
  • 如果直接在生成的.cs文件里面给每个消息类标记Message[Opcode.Login]会产生问题
  • 就是每次修改.proto文件重新生成的时候,会导致标记的opCode被覆盖。
  • 但是还好他生成是分部类,ET框架就利用这点把消息类分成两部分,一部分是消息体,一部分是定义opCode和自己的接口这些
  • 但是我比较懒,我不想写那么多。直接通过反射获取所有类型,并且按照遍历顺序给每一个打一个ID就是了
  • 客户端和服务端使用同一个程序集,所以序号也是一样的。
  • 但是潜在的问题是
  • 1.必须把客户端和服务端的消息类型定义在一起
static void GetAllMessageType(){var assembly = Assembly.GetExecutingAssembly();//注意这里标记开始codeushort startIndex = 1;foreach (var type in assembly.GetTypes()){if (type.Namespace == nameof(Message) && type.GetInterface(nameof(IMessage)) != null){msgTable.Add(startIndex, type);msgInstanceTable.Add(startIndex, (IMessage)Activator.CreateInstance(type));startIndex++;}}}

ET框架关于opCode的理解相关推荐

  1. 面试精讲之面试考点及大厂真题 - 分布式专栏 05 公司使用什么RPC框架,聊聊你理解的RPC原理

    05 公司使用什么RPC框架,聊聊你理解的RPC原理 引言 前些年我们在做一个规模不大的系统的时候,也就是单体架构,一台服务器部署上一个应用和数据库也就够了.但是现代化互联网公司业务逐渐扩大,服务逐渐 ...

  2. csla java_Csla框架之命令对象理解

    今晚整理了一下前段时间做的一个小型工作流应用程序,其核心的功能块是用的Csla框架试用开发,今天就对Csla框架中的命令对象做下个人理解. 众所周知,在工作流的开发过程中,可以分为流程定义过程.流程运 ...

  3. php laravel 理解,程序员-说一下PHP框架Laravel,如何理解她的思想

    如何理解laravel的思想? 1)更新太快,疲于追赶 Laravel 4.x开发出的程序要升级到 5.x的,貌似都大动干戈? 2)让人后怕的Route 为什么就没有一个固定的规则?非得每一个网址都写 ...

  4. 构架、框架和设计模式的理解

    一个 架构师 构架了一个框架,约束框架使用者只能使用规定的结构来进行二次开发. 架构是指软件结构的专用名词,构架只是架构的另一种叫法. 框架是半成品.典型地,框架是系统或子系统的半成品. 1.设计模式 ...

  5. 【IOC框架】分析与理解

    1 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  6. kylinH5框架之项目组件理解

    目录 组件介绍 组件声明结构 组件接口 script dependency template style 状态注入 接口声明 组件介绍 Component 扩充自 Vue 的组件, 提供了 Vue 组 ...

  7. 框架基础:深入理解Java注解类型(@Annotation)

    注解的概念 注解的官方定义 首先看看官方对注解的描述: An annotation is a form of metadata, that can be added to Java source co ...

  8. 卷积神经网络CNN介绍:结构框架,源码理解【转】

    1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表 ...

  9. 分布式 - 公司使用什么RPC框架,聊聊你理解的RPC原理

    不啰嗦,我们直接开始! 引言 以前在做一个规模不大的系统的时候,用的是单体架构,一台服务器部署上一个应用和数据库也就够了. 但是现代化互联网公司业务逐渐扩大,服务逐渐细分,很多服务之间需要通过远程分布 ...

最新文章

  1. 初识--AVSpeechSynthesizer
  2. mysql innodb_undo_directory默认_MySQL innodb_undo_tablespaces相关参数
  3. js面向对象的五种写法
  4. html5手机移动端三级联动城市选择器
  5. 大数据领域的专精特新“小巨人”中科闻歌
  6. web.config中配置数据库连接的两种方式
  7. nodejs计算时间间隔_nodejs 如何定时执行一个函数
  8. android 关闭jack_安卓编译 Jack server 错误问题解决办法
  9. Hive SQL面试题(附答案)
  10. crackme用来测试程序设计人员的逆向工程技能的小程序。
  11. laravel pdf 加水印
  12. Gd-DTPA钆元素钆元素对比磁共振造影剂 氟-19磁共振/荧光双模态显影剂19F MRI
  13. 赛事解析|乒乓球时序动作定位大赛亚军方案分享
  14. 我就知道肯定有人想要这个
  15. 最全Pycharm教程(40)——Pycharm扩展功能之捆绑插件TextMate
  16. JavaScript之继承和原型
  17. java:POI导出excel
  18. Java实现第九届蓝桥杯快速排序
  19. OPPO 便签导出和转移
  20. ffmpeg 本地麦克风声音和系统声音混音后,再混合本地桌面成最终的mp4文件-修正

热门文章

  1. c语言文件打开方式字符串,C语言打开文件-C语言打开文件的方式-C语言以只读方式打开文件-C语言以读写方式打开文件-嗨客网...
  2. 简单网页版的注册登录案例(JSP+CSS+MySQL+Servlet+MVC设计思想,含源码!)
  3. gpgpu_GPGPU Java编程
  4. 90%AI企业都亏损?阿里、华为等高管来苏畅谈人工智能
  5. excel表格分割线一分为二_Anki+思维导图的两种方法(Anki+表格,Anki+幕布)
  6. 禁止Altium designer(其他软件同样适用)联网的配置操作
  7. 怎么使用PS一键抠图?
  8. OpenCv笔记(五)--图像分割与分水岭算法
  9. 点击密码框显示密码(点击密码框小眼睛可显示输入密码)
  10. 三次技术转型的我在帝都的北漂奋斗史