云计算百科
云计算领域专业知识百科平台

Socket五(异步服务器实现)

目录

一 上一章回顾

二 同步概念

三 异步概念

四 服务器端异步实现

1 开启侦听

2 接收消息

3 发送消息

4 源码展示

5 异常提示

五 调用初始化

六 总结

七 下章预告


一 上一章回顾

一 上一章回顾

二 引入命名空间

三 定义套接字属性

四 定义初始化套接字方法

1 开启监听

2 发送消息

3 接受消息

五 关闭套接字

六 总结

七 下章预告


二 同步概念

同步是阻塞模式,当进程执行某个请求的时候,若该请求需要时间处理才能返回结果,那么这个进程将会阻塞停止,直到收到处理结果才继续执行下方逻辑;

同步是客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。在此期间客户端阻塞等待服务器返回结果,显示在UI上就是屏幕卡顿。


三 异步概念

异步是非阻塞模式,进程不会进阻塞,不管处理结果是否返回,而是直接执行下方业务逻辑。当处理有结果后,系统会通知进程进行处理,这样可以优先处理其他工作,有助于提高执行的效率。 异步就相当于当客户端发送给服务端请求时,在等待服务端响应的时候,客户端执行其他业务逻辑,这样节约了时间,提高了效率。


四 服务器端异步实现

首先,函数声明Async异步关键字,传入端口号。

1 开启侦听

  • Using初始化服务器套接字,传入地址簇、套接字类型和通信协议类型。
  • Bind IP端点。
  • Listen客户端连接。
  • AcceptAsync获取连接服务器句柄。
  • 2 接收消息

  • ReceiveAsync接受消息,并返回接受长度
  • 将收到的字节数组转化为字符串
  • 定义终止符
  • 确认字符串终止,则控制台输出Socket server received message:XXX
  • 3 发送消息

  • 定义发送消息
  • 将发送消息转化为字节数组
  • SendAsync发送消息
  • 控制台输出 Socket server sent acknowledgment:XXX
  • 退出循环
  • 4 源码展示

    public async void InitSocket(int port)
    {
    using (ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
    {
    ServerSocket.Bind(new IPEndPoint(IPAddress.Any, port));
    ServerSocket.Listen(10);
    //异步接受客户端连接
    var handler = await ServerSocket.AcceptAsync();
    while (true)
    {
    //异步接受消息
    var received = await handler.ReceiveAsync(buffer,0);
    var response = Encoding.UTF8.GetString(buffer, 0, received);
    var eom = "<|EOM|>";
    if (response.IndexOf(eom) > -1 /* is end of message */)
    {
    Trace.WriteLine($"Socket server received message: \\"{response.Replace(eom, "")}\\"");

    var ackMessage = "李工你好,我是你十年老粉!<|ACK|>";
    var echoBytes = Encoding.UTF8.GetBytes(ackMessage);
    await handler.SendAsync(echoBytes, 0);
    Trace.WriteLine($"Socket server sent acknowledgment: \\"{ackMessage}\\"");
    break;
    }
    else
    Trace.WriteLine("消息不包含结束符号");
    }
    }
    }

    5 异常提示

    如果收到的消息较大,控制台输出:“消息不包含结束符号!”

    Trace.WriteLine("消息不包含结束符号");


    五 调用初始化

    首先初始化该套接字实力对象,其次调用初始化套接字方法,传入端口号

    var server = new Server.ViewModels.ServerViewModel();
    server.InitSocket(8080);


    六 总结

    以上我给大家介绍了同步概念、异步概念、服务器异步实现、调用初始化等内容,我们从中可以了解服务器套接字的工作原理。


    七 下章预告

    下一章我会教大家客户端套接字异步通信的工作原理。

    博主RaymondLeigh:如果您觉得本文为您提供了结局思路或解决了您的实际问题,麻烦您🙏帮忙点赞、收藏、评论、关注一键四连,您的举手之劳将为我写作提供动力源泉!🤞

    print('Hello,RaymondLeigh!')  # 每日问候,跟大家问好!


    🔥精品框架专栏:Prism专栏 WPF专栏 


    🌞精品前端UI设计专栏:MaterialDesign专栏


    💾精品后端数据库专栏:SqlServer专栏 EFCore专栏 Socket专栏


    💻精品程序开发专栏  VisualStudio专栏

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Socket五(异步服务器实现)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!