SuperSocket与Netty之实现protobuf协议,包括服务端和客户端

今天准备给大家介绍一个c#服务器框架(SuperSocket)和一个c#客户端框架(SuperSocket.ClientEngine)。这两个框架的作者是园区里面的江大渔。 首先感谢他的无私开源贡献。之所以要写这个文章是因为群里经常有人问这个客户端框架要如何使用。原因在于服务端框架的文档比较多,客户端的文档比较少,所以很多c#基础比较差的人就不懂怎么玩起来。今天就这里写一个例子希望能给部分人抛砖引玉吧。

参考资料:

SuperSocket文档 http://docs.supersocket.net/

我以前在开源中国的一部分文章:http://my.oschina.net/caipeiyu/blog

这篇文章选择 protobuf 来实现,选择protobuf是因为服务器有可能用的是java的netty,客户端想用SuperSocket.ClientEngine,而netty我看很多人经常用protobuf。


一、SuperSocket服务器

新建一个项目 ProtobufServer 然后添加 SuperSocket 和 protobuf 的依赖包。

添加protobuf依赖包 输入的搜索词是 Google.ProtocolBuffers
添加SuperSocket依赖包 输入搜索词是 SuperSocket,要添加两个SuperSocket.Engine 和 SuperSocket

上面的工作完成后,我们就应该来实现我们的传输协议了。传输协议打算参考netty的ProtobufVarint32FrameDecoder.java

* BEFORE DECODE (302 bytes)       AFTER DECODE (300 bytes)* +--------+---------------+      +---------------+* | Length | Protobuf Data |----->| Protobuf Data |* | 0xAC02 |  (300 bytes)  |      |  (300 bytes)  |* +--------+---------------+      +---------------+

Protobuf Data是protobuf的序列化结果。Length(Base 128 Varints)是表示Protobuf Data的长度。protobuf本身的序列号协议可以参考:https://developers.google.com/protocol-buffers/docs/encoding

我们先看一下SuperSocket的内置的常用协议实现模版看看有没有合适我们可以直接拿来用的。因为Length使用的是Base 128 Varints一种处理整数的变长二进制编码算法,所以呢内置的协议实现模板并不能直接拿来使用,所以我们只能自己来实现接口IRequestInfo和IReceiveFilter了,参考:使用 IRequestInfo 和 IReceiveFilter 等等其他对象来实现自定义协议

这里说明一下:为什么protobuf明明序列化成Protobuf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值