1、服务器高并发?
服务器同时要负载个很多个的客户端,负载 的客户端越多,高并发就越多
2、网络通信是神马?
网络通信的一种通用 的技术。
PESocket_简介
PESocket案例分析
使用PESocket
控制台工程中使用
控制台工程引用dll
Unity中使用
Unity中引用dll
通信协议工程
IP和端口
参考文档用法
服务器框架介绍
学习思路总结
四层:服务层、业务层、缓存层、数据层
服务层和业务系统层与客户端的设计类似
重点讲解缓存层的作用
服务器启动逻辑
代码文件结构
命名排序
服务器网络服务
移植案例代码到服务器网络服务层
客户端网络服务
移植案例代码到客户端网络服务层
封装通用工具
统一日志工具
登录协议定制
统一消息发送接口
登录消息处理
消息分发
附加Serversession数据
驱动消息检测
缓存层开发
新建缓存层,并初始化
协议错误码概念
缓存层获取数据
定义玩家数据类PlayerData
数据库查找接口
缓存上线玩家数据
PESocket
基于C#语言实现的高效便捷网络库。支持集成到Unity当中使用。
不用过多了解网络通信内部原理,只需几行简单的代码,便能简捷快速开发基于C#语言的服务器和客户端,实现网络通信。
使用示意:
1.创建Socket服务器
PESocket<ClientSession, NetMsg> client = new PESocket<ClientSession, NetMsg>();
client.StartAsServer("127.0.0.1", 17666);
2.创建Socket客户端
PESocket<ClientSession, NetMsg> client = new PESocket<ClientSession, NetMsg>();
client.StartAsClient("127.0.0.1", 17666);
3.网络消息定义
网络消息需要继承自PEMsg类,并打上[Serializable]标签,便于使用C#语言的序列化功能。消息体支持多层嵌套。
[Serializable]
public class NetMsg : PEMsg {
public int id;
public string name;
public int coin;
}
4.发送网络消息
使用ClientSession/ServerSession类中的SendMsg(T msg)函数以及重载函数SendMsg(byte[] data)可以分别发送打包好的网络消息以及完成序列化二进制网络消息。
NetMsg msg = new NetMsg {
id = 10086,
name = "Plane",
coin = 99999
};
this.SendMsg(msg);
5.接收网络消息
在自定义的ClientSession/ServerSession类中重写OnReciveMsg(T msg)可以接收网络消息。
protected override void OnReciveMsg(NetMsg msg) {
base.OnReciveMsg(msg);
//TODO 增加处理网络消息的业务逻辑
PETool.LogMsg("Msg_id:" + msg.id);
PETool.LogMsg("Msg_name:" + msg.name);
PETool.LogMsg("Msg_coin:" + msg.coin);
}
6.第三方日志工具接口
通过SetLog(bool log = true, Action<string, int> logCB = null)接口,可以传入第三方的日志显示工具。(下面以Unity为例,实现在Unity编辑器控制台中输出日志信息)
skt.SetLog(true, (string msg, int lv) => {
switch (lv) {
case 0:
msg = "Log:" + msg;
Debug.Log(msg);
break;
case 1:
msg = "Warn:" + msg;
Debug.LogWarning(msg);
break;
case 2:
msg = "Error:" + msg;
Debug.LogError(msg);
break;
case 3:
msg = "Info:" + msg;
Debug.Log(msg);
break;
}
});