关于网游框架如何搭建的理解

                

网游无外乎是所有客户端与服务器产生连接,当客户端1发生什么操作时,需要向服务端发送信息,此时服务端也会回复响应信息,客户端在根据响应信息做出功能。比如客户端1要创建角色,发信息给服务端,服务端就会把响应信息发给每个客户端。这样每个客户端都可以看到客户端1创建的角色。

网络通信的实现:

vs系统中底层提供了socket接口,用于实现网络通信,但是需要手动处理很多细节,开发效率较低,所以往往会引入HPSocket,这是基于socket而封装的一种可快速开发的网络通信框架。支持多种协议,比如:tcp,http等。

  • TCP 示例

    • 服务端:new TcpServer()

    • 客户端:new TcpClient()

  • HTTP 示例
    • 客户端:new HttpClient()

    • 服务端:new HttpServer()

开发流程:

备注资料:

消息的组成:最简单的消息组成就是由类型、命令、参数组成。比如一个账号注册登录,客户端发送的注册消息组成(1,1,账号,密码)即类型1代表是账户类型,命令1代表注册。登录消息组成(1,2,账号,密码)即类型1代表是账户类型,命令2代表登录,参数就是账号密码。

①服务器的开发

引入HPScoket.Net包。

服务端主要流程:

创建服务器:server

public class Server

{

           //创建服务器对象。

           public static TcpServer server=new TcpServer();

           //提供服务器的具体信息

       public Sever()
        { 
            //ip地址,服务端的ip地址
            server.Address = "10.8.193.245"; 
            //服务端监听的端口,这个可以随意,但是客户端连接端口也要是这个才能监听到。
            server.Port = Convert.ToUInt16(5566);
            //监听到客户端连接,订阅客户端连接事件。
            server.OnAccept += Server_OnAccept;
            //监听到客户端断开,订阅断开事件
            server.OnClose += Server_OnClose;
            //监听到客户端发来的消息,订阅接收到消息事件
            server.OnReceive += Server_OnReceive;
            //启动
            server.Start();
        }

}

分发接收消息:这里就有两种方式实现①搭建三层框架②消息监听模式

第一种:就是对于不同的类型消息会有不同的处理,比如账户类,我们就创建AccountBLL类业务逻辑层,专门用来处理账户类型消息。还有角色类,我们就创建UserBLL类业务逻辑层来处理角色类型的消息。还会创建对应的AccountDAL类,UserDAL。数据访问层就是往往需要与数据库直接对接,将数据返回给业务逻辑层。

第二种:大致原理一样,只是不用创建三层,当接收到消息时,直接执行每个监听对象的onreceive方法,每个监听对象的onreceive方法中都会有if(type==??)判断只有是那种类型的消息才会执行。

服务器接收到消息处理程序:

  private HandleResult Server_OnReceive(IServer sender, IntPtr connId, byte[] data)
  {   //分发接收消息
      //把二进制转换成message
      Message message = MessageTool.ToObject(data);
      //判断是什么类型,因为不同的类型执行不同的逻辑。
      switch (message.type)
      {
          case Message.Type.Type_Account ://说明是账号类型
              BLLManager.Instance.account.Server_OnReceive(connId, message);//执行accountbll业务逻辑层的onreceive方法
              break;
          case Message.Type.Type_User://说明是账号类型
              BLLManager.Instance.user.Server_OnReceive(connId, message);
              break;
          case Message.Type.Type_Game:
              BLLManager.Instance.game.Server_OnReceive(connId, message);
              break;
      }
      return HandleResult.Ok;
  }  

每个业务逻辑层都有自己的onreceive方法,所以适合创建一个接口,继承接口即可。同时还会创建模型层,比如有账户模型类,里面的基本信息就是id,账号,密码。注册账户就是要创建一个账户模型类对象,还有角色模型类,里面的基本信息有id,血量,位置,那个类型的角色等,创建一个角色就是要创建一个角色模型信息对象。

客户端主要流程:

首先同样需要引入需要的依赖项:

前两个是实现网络通信必备的程序集,NetModel其实是我们在服务端封装号的,里面有messager类,是对一个信息的封装。

创建客户端:client

public class Client : MonoBehaviour
{
    public static Client Instance;
    //创建客户端对象
    TcpClient tcpClient=new TcpClient();  
    void Start()
    {
        
    }
    private void Awake()
    {
        Instance = this;
        tcpClient.Address= "10.8.193.245"; //连接的服务端的ip地址
        tcpClient.Port = Convert.ToUInt16(5566);//连接的端口号
        tcpClient.Connect();//连接服务端
        tcpClient.OnReceive += TcpClient_OnReceive1; 
    }

分发接收消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值