Netty4.XUnity与Netty使用protoBuf
Posted 程序员小毛驴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty4.XUnity与Netty使用protoBuf相关的知识,希望对你有一定的参考价值。
客户端与服务器端之间传输的数据格式有很多种如Json、XML、thrift、Protobuf等等。protobuf来自谷歌,它的特点是数据小、编解码性能高、支持多种语言,它序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一。更加详细请阅读下面2篇文章:
【Google Protobuf】windows下protobuf的环境搭建(一)
【Google Protobuf】protobuf的使用(二)
一、游戏登陆界面
一个简单的登陆UI,关于Unity的UI操作这里就不说了,主要讲C#与Netty如何使用protobuf数据传输。
1.1 代码修改
package Packets; option java_package = "com.game.lll.protobuf"; option java_outer_classname = "LCPacket"; message Login optional string username = 1; optional string password = 2;
终端命令: +---------------------------Java---------------------------------------+ D:\\ServerWork\\MyGame\\protobuf>protoc.exe --java_out=./ LCPacket.proto +------------------------------------------------------------------+ +---------------------------C#---------------------------------------+ D:\\Game Server\\Protobuf\\ProtoGen>protogen -LCPacket.proto -o:LCPacket.cs -ns:Packets +------------------------------------------------------------------+
- 使用Netty提供的ProtobufVarint32LengthFieldPrepender,可以处理半包消息
- 继承Netty提供的通用半包解码器LengthFieldBasedFrameDecoder
- 继承ByteToMessageDecoder类,自己处理半包消息
ch.pipeline().addLast(new ProtobufVarint32FrameDecoder());
ch.pipeline().addLast(new ProtobufDecoder(LCPacket.Login.getDefaultInstance()));
ch.pipeline().addLast(new ProtobufVarint32LengthFieldPrepender());
ch.pipeline().addLast(new ProtobufEncoder());
using UnityEngine;
using System.Collections;
using Util;
using UnityEngine.UI;
using Packets;
public class LoginView : SingletonMonoBehaviour<LoginView>
[SerializeField]
private UIInput txtName;
[SerializeField]
private UIInput txtPwd;
[SerializeField]
private UILabel txtTip;
void Start ()
public void OnClickLoginBtn()
Login login = new Login();
login.username = txtName.text;
login.password = txtPwd.text;
LoginModel.Instance.TocLogin (login);
Debug.Log(login.username);
Debug.Log(login.password);
using UnityEngine;
using System.Collections;
using ServerMessage;
using Packets;
public class LoginModel : BaseModel<LoginModel>
protected override void InitAddTocHandler()
AddTocHandler(typeof(Login), TocLogin);
public void TocLogin(object data)
SendTos(data);
1.2 运行结果
作者: 小毛驴,一个游戏人
梦想:世界和平
原文地址: http://blog.csdn.net/liulongling 若有错误之处,请多多谅解并欢迎批评指正。 本博客中未标明转载的文章归作者 小毛驴所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
以上是关于Netty4.XUnity与Netty使用protoBuf的主要内容,如果未能解决你的问题,请参考以下文章