游戏服务器
yy763496668
这个作者很懒,什么都没留下…
展开
-
0003-异步编程粘包
针对于上一篇文章中,加入客户端一次性发送大量的数据,那么有些信息就会粘包就会发生。客户端代码发送消息代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ASYNClient{ class Program { s...原创 2019-04-20 14:11:35 · 181 阅读 · 0 评论 -
0002-TcpListener/TcpClient异步编程
服务器代码示例:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;namespace ASYNServer{ class Server { privat...原创 2019-04-20 14:05:54 · 681 阅读 · 0 评论 -
0001-TcpListener/TcpClient同步编程
在使用TcpListener/TcpClient同步编程之前,要引入两个命名空间using System.Net;using System.Net.Sockets;服务器代码示例:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;u...原创 2019-04-20 14:01:41 · 321 阅读 · 0 评论 -
0010-异步编程连接池
服务器和客户端连接,服务器会创建一个连接,客户端和服务器断开,服务器会销毁一个连接。为了避免服务器频繁的创建和销毁连接。在这里,我们可以创建一个连接池去管理这些连接。其实连接池是一种空间换时间的操作。连接池代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;names...原创 2019-04-24 14:40:17 · 302 阅读 · 0 评论 -
0009-异步编程消息队列与断开连接
到目前为止,这里面有个问题,就是加入服务器频繁的发送数据给客户端,客户端还没有发送出去就由要发送数据,那么我们怎么保证数据按顺序发送呢?这里面我们引入消息队列。 /// <summary> /// 发送数据列表 /// </summary> private Queue<byte[]> sendQue...原创 2019-04-24 09:11:24 · 1353 阅读 · 0 评论 -
0008-异步编程消息分发与连接状态
消息的分发应该有SeverPeer.cs来进行发送,我们之前已经将所有和服务器的连接进行了封装,成为了ClientPeer.cs。接受和发送数据都在ClientPeer实例中。但是我们要将接受到的数据进行模块儿化处理,那么就要由SeverPeer实例来进行管理。在这里我们就要使用到委托和接口回调了。我们先定义一个IApplication类,此类的作用就是把接受到的数据以及连接状态发送给应用层。...原创 2019-04-23 17:30:14 · 170 阅读 · 0 评论 -
0007-异步编程第二次重构
在我们接受到消息后,其实应该有一个消息类出处理收发的消息,而减少ClientPeer的工作量。我们这次使用ProtoBuf封装一个消息。在这个消息中我们要包含消息来自哪一个模块,作用于那个函数,消息内容是什么。因此我们定义了一个协议:.proto文件package ServerProtocol.Protocols;message Message{ required int32 OpCo...原创 2019-04-23 09:59:06 · 298 阅读 · 0 评论 -
0006-异步编程协议初识protobuf-net
在我们原创 2019-04-22 14:20:32 · 471 阅读 · 0 评论 -
0005-异步编程第一次重构
我们到目前为止,服务器已经能和多个客户端建立联系,大致的图像就是下面的图像,服务器保存了每一个和客户端建立起来的连接,也就是套接字。从服务器和客户端建立起来连接开始,也就是以下的代码Socket client = listener.EndAcceptSocket(ar);之后,我们应该让每一个连接自行管理自己的行为而不是让Server.cs这个类去管理。就像上图一样。把每一个连接都作为一个...原创 2019-04-21 21:24:34 · 295 阅读 · 0 评论 -
0004-异步编程分包
如果我们要处理客户端的每一条消息,针对与上面的粘包的问题,我们无法处理消息的,我们不知道消息到底有多长(虽说我们的案例是一样的,但实际开发中可能是不一样的),那么我们就要涉及到分包的问题了。在上一篇的文章中我们可以看到一篇文章被接受了多次才接受完,加入客户端一下发了多篇文章?那么我们怎么才能把每一篇文章分出来呢?这就涉及到了分包。我们在客户端每次发消息的时候我们都要将发送信息的长度加到消息的前...原创 2019-04-20 14:13:53 · 219 阅读 · 0 评论