【实战】Unity3d实战之Unity3d网络游戏实战篇(9):协议

本文探讨Unity3d网络游戏中的协议设计,强调协议作为通信规则的重要性。介绍了协议基类的创建,用于解码、编码和获取协议名。讨论了不同协议类型如字符串和字节流的处理差异,以及为何在发送字符串时需要附加长度信息。最后指出在实际通信中,发送数据包前需包含协议的总长度信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity3d实战之Unity3d网络游戏实战篇(9):协议

学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍,如有侵权请联系,必删。

 一套通用的服务端框架要支持不同游戏所使用的各种协议格式。所谓协议就是通信规则,例如:如果发送端直接发送一串数值数据给接收端,接收端并不知道这一串数据到底是用来做什么的,里面的数据代表了什么信息。而协议就是解决这一问题的一套规则,一套发送端和接收端都知道的规则。在要发送的数据前添加某些标志,发送端和接收端共同规定带有这个标志的数据的用途。这样,两端就可以对接收到的数据进行解析,并根据两者共同定立的规则来分辨所接收到的数据的用途。
 
 所有的协议都有相同的方法:解码、编码、获取协议名等等,以此为基础,我们可以编写一个协议的基类:
 

using System;

namespace Server
{
    public class ProtocolBase
    {
        /// <summary>
        /// Decode the readBuff from start to start+length. Package readBuff as a protocol and return it.
        /// </summary>
        /// <param name="readBuff">Read buff.</param>
        /// <param name="start">Type: int, decode begin from start.</param>
        /// <param name="length">Type: int, decode from begin to start+length.</param>
        public virtual ProtocolBase Decode(byte[] readBuff, int start, int length)
        {
            return new ProtocolBase ();
        }

        /// <summary>
        /// Encode the protocol's content to binary array.
        /// </summary>
        public virtual byte[] Encode()
        {
            return new byte[] { };
        }

        /// <summary>
        /// Return the protocol's name.
        /// </summary>
        /// <returns>The name.</returns>
        public virtual string GetName()
        {
            return "";
        }

        /// <summary>
        /// Return the protocol's description.
        /// </summary>
        /// <returns>The desc.</returns>
        public v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值