实时射击网游总结2--UDP

1.http基于tcp;http通信一次会断开

2.http通过换行符来分割  http有http头,描述数据大小。

3.http是无状态协议。无状态可以扩展。

4.分区分房间

5.IP 和端口号

6.状态速度 和通信量,

7.流模型 请求响应  tcp攒字节

8.网络报文丢失,模拟

9.tcpClient;

10.tcolistenner;

11.1对多,1对10000,1对1000000;

扫描二维码关注公众号,回复: 2930009 查看本文章

12.线程有限 一些actor 

13.udp不会产生新的 socket的。

14.启动时的异常,通信时 发生异常,关闭发生异常

15.缓存本地,重新发送,

16

socket.Shutdown(SocketShutdown.Both);
socket.Close();

17.

line.Split(char.Parse(" "));

18.多线程搞服务器

19.

var socket2 = socket.Accept();
var thread = new Thread(() => { ThreadRun(socket2); });
thread.Start();

20、用线程不用异步也可以多人聊天

21.消息放线程上,线程来广播。

22. Thread.Sleep(100);睡眠100毫秒

23.服务器处理多线程消息队列有点意思。

24.io复用技术 异步网络编程最好啊。

25.Io thread 监控。IO复用。

26.C# 中的task,轻量级线程,性能好。 Async Await; 必须用到tcpListenner

27.

var listener = new TcpListener(4040);

var client = listener.AcceptTcpClient();

  private static async void ProcessSocket(TcpClient client)
        {
            var stream = client.GetStream();
            while (true)
            {
                var buffer = new byte[1024];
                var n = 0;
                try
                {
                    n = await stream.ReadAsync(buffer, 0, 1024);
                }catch
                {

                }
            }
        }

28.

c.GetStream().write(buffer, 0, 1024);

29.

c.GetStream().write(buffer, 0, 1024);
listener.Start();

30.TcpListener  TcpClient 客服端。封装了错误捕获。

31.socket 释放。资源。

32.原生资源释放,本身资源释放。

33.IOS tcpClient 设置成IPv6;

34.NoDelay 发送不缓存 提高及时响应能力啊。

35.

        private static void AsyncRead(IAsyncResult result)
        {
            try
            {
                var n = client.GetStream().EndRead(result);
            }catch(Exception exp)
            {

            }
        }

36

 var stream = client.GetStream();
            var n = await stream.ReadAsync(buffer, 0, 1024);

37.udp考虑 应用层协议 tcp 考虑网络延时 超时,udp 报文可靠 性,有序性。

38.使用换行符。

29.md5

    using (var md5 = md5.Create())
        {
          data=   md5.ComputeHash(buffer, 0, total);
        }

30.

声明变量作用域
完整的应该为using(类名 名 = 赋值){}
相当于:
{
类名 名 = 赋值
名.Dispose();
}
即可用于满足 IDispose接口的类 ,可以通过这种形式,即使错误时候,也能使 .Dispose() 运行

31.十六进制 字符串


var sb = new StringBuilder();

for(var i = 0; i < data.Length; i++)
{
sb.Append(data[[i].ToString("x2"));
}

32.

for (var i = 0; i < total; i++)
{
sb1.Append(System.Convert.ToChar(Buffer[i);

}

33.长度  类型 内容

34Wire format 序列化的

35.protobuff协议。

36.安卓buff buffTool库

37.

using (var output = FileStyleUriParser.Create("john.data"{ }
var co = new Google.Protubuf.CodeOutpusStream(outpu);
john.WriteTo(co);
co.Flush();
; ))

38.状态机读取还是干啥 啊

39.Array.Copy(data,readYet,dataStream.buffer,dataStream.writePos,n);

40.协议编号  网络协议  请求响应模型和推送模型。

41.协议分为响应模型  和推送模型。 报文 多协议定义,  C2S  S2C;

42.Convert.ToInt32  制定的转换

 43.服务器解析协议,并映射

44. Array.Copy(data,

45.

public  IMessage ReadData(int typeId)
{
    var type = idToProtocols[typeId];
    var msg = Activator.CreateInstance(type) as IMessage;

    var ci = new Google.Protobuf.CodeInputStream(Buffer, 0, writePos);
    msg.MergeFrom(ci);
    return msg;
}

46.请求响应模型 。协议定义帧号,根据帧号id  对应哪个请求。同一个请求 推送     是否购买成功 请求响应模型。 在协议定义帧id 

//fraId >0;

//frame ==0;报文的帧ID;

猜你喜欢

转载自www.cnblogs.com/xiaomao21/p/9551130.html
今日推荐