ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ET服务器框架学习笔记(二十)

2020-11-28 16:31:35  阅读:404  来源: 互联网

标签:UDP self BenchmarkComponent 笔记 session 服务器 ET


ET服务器框架学习笔记(二十)

文章目录


前言

本篇简单介绍一下ET中得压测模块


提示:ET5.0中的压测示例比较简单,实际上针对不同业务逻辑需要写不同的压测模块,但是使用方式是几本相同的。

一、BenchmarkComponent

BenchmarkComponent组件的内容相对简单,大体流程:模拟多个客户端,每个客户端向固定端口发送一个消息,然后记录耗费时长等信息。

public static void Awake(this BenchmarkComponent self, string address)
		{
			try
			{
				IPEndPoint ipEndPoint = NetworkHelper.ToIPEndPoint(address);
				NetOuterComponent networkComponent = Game.Scene.GetComponent<NetOuterComponent>();
				for (int i = 0; i < 2000; i++)
				{
					self.TestAsync(networkComponent, ipEndPoint, i);
				}
			}
			catch (Exception e)
			{
				Log.Error(e);
			}
		}

获取地址,外网组件,然后调用2000次循环(模拟2000个客户端同时发送数据),内部调用TestAsync

public static async void TestAsync(this BenchmarkComponent self, NetOuterComponent networkComponent, IPEndPoint ipEndPoint, int j)
		{
			try
			{
				using (Session session = networkComponent.Create(ipEndPoint))
				{
					int i = 0;
					while (i < 100000000)
					{
						++i;
						await self.Send(session, j);
					}
				}
			}
			catch (Exception e)
			{
				Log.Error(e);
			}
		}

每调用一次TestAsync,都通过外网组件创建一次Session。然后内部循环异步调用100000000次发送。

public static async Task Send(this BenchmarkComponent self, Session session, int j)
		{
			try
			{
				await session.Call(new C2R_Ping());
				++self.k;

				if (self.k % 100000 != 0)
				{
					return;
				}

				long time2 = TimeHelper.ClientNow();
				long time = time2 - self.time1;
				self.time1 = time2;
				Log.Info($"Benchmark k: {self.k} 每10W次耗时: {time} ms {session.Network.Count}");
			}
			catch (Exception e)
			{
				Log.Error(e);
			}
		}

每次发送完毕后唤醒异步,进行记录,这里记录了每10W次处理的耗费时间,简单的估算了处理能力,当然也可以在这里用其他指标来进行测试。服务器得处理方式也比较简单,收到Ping直接回复,没有其他处理。

至此,一个外网组件的最简单的测试,也可以测试actor等等其他消息,看响应速度等。

**备注:**对于webSocket的压力测试组件WebSocketBenchmarkComponent,与普通的测试基本一样,这里就不做过多解释了,只是一个socket类型与地址不同而已。

二、ET中另外两个服务方式UDP,WebSocket

  • WebSocket的实现方式与TCP差别不多,唯一的几个差别就是在开启服务,新建Socket的地方不一样,Tcp中交给Channel,WebSocket交给了Service处理。
  • UDP在ET中使用了KCP的方式进行使用,即可靠UDP。UDP处理相对TCP来说更加复杂一点。内部封装了很多状态消息,因为消息接收时可能是无序的,所以还要对这些消息进行二次消息的拼接处理,这样能保证消息的可靠性。
    UDP的具体处理我就不仔细说了,对于延时要求较高,可靠性要求较低的游戏可以使用这种通信方式。在一般的MOBA类,或者竞技类游戏中用的比较多,因为节省了握手以及错误重发等机制,所以在不稳定网络中有很好的响应表现。

总结

自此,ET5.0服务器框架中所有的服务模块基本上都简单的梳理了一遍,个人理解可能会有错误的地方,希望后面在具体使用过程中进行纠正。
后续会真正开始使用ET5.0作为框架基础进行开发,当然如果6.0正式版本在我开发初期的话,估计我会马上转战6.0了。毕竟6.0里面的思想更加先进,对理解,使用,以及合作开发上都提供了更加强大的能力。
这里再次感谢ET作者,开源这款强大的C#语言基础的服务器框架,里面很多思想都值得学习。
最后希望在这款框架的帮助下,实现人生价值!!!!!!

标签:UDP,self,BenchmarkComponent,笔记,session,服务器,ET
来源: https://blog.csdn.net/kylinok/article/details/110282116

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有