<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      超輕量級、支持插件的 .NET 網(wǎng)絡(luò)通信框架

      前言

      給大家推薦一個輕量級的、支持插件的綜合網(wǎng)絡(luò)通信庫:TouchSocket。

      TouchSocket 的基礎(chǔ)通信功能包括 TCP、UDP、SSL、RPC 和 HTTP。其中,HTTP 服務(wù)器支持 WebSocket、靜態(tài)網(wǎng)頁、XML-RPC、WebAPI 和 JSON-RPC 等擴展插件。

      此外,TouchSocket 還支持自定義協(xié)議的 TouchRPC,具備 SSL 加密、異步調(diào)用、權(quán)限管理、錯誤狀態(tài)返回、服務(wù)回調(diào)和分布式調(diào)用等功能。

      在空載函數(shù)執(zhí)行時,10 萬次調(diào)用僅需 3.8 秒;在不返回狀態(tài)時,僅需 0.9 秒。

      項目介紹

      TouchSocket(Pro)是基于 .NET 的程序集系列,可用于對應(yīng) .NET 版本的 C#、F# 和 VB.NET 項目。無論你的項目是控制臺、WinForms、WPF 還是 ASP.NET Core,它都全面支持。

      TouchSocket(Pro)長期支持 .NET 4.5、.NET 4.8.1、.NET Standard 2.0 三個平臺,并將 .NET 6.0 作為最新穩(wěn)定版支持平臺,同時支持.NET 7.0 作為最新發(fā)布平臺。

      項目環(huán)境

      .NET 4.5:保證了在.Net Framework上的最低支持版本?;旧现С秩?9%的功能。

      .NET 4.8.1:這是在net45的依賴基礎(chǔ)之上,額外添加了一些微軟官方庫,以支持達(dá)到net6.0一樣的功能(例如:Span、ValueTuple、ValueTask等)。

      .NET Standard 2.0:這是保證了在一些通用平臺上的最低依賴?;旧现С秩?9%的功能。

      .NET 6.0:這是目前最新的穩(wěn)定版發(fā)布平臺,它在最低依賴的前提下,還保證了全部功能。

      .NET 7.0:這是目前最新的發(fā)布平臺,我們會在該平臺上開發(fā)最能嘗鮮的功能(例如:AOT等)。

      支持框架的框架Console、WPF、Winform、Blazor Server、Xamarin、MAUI、Avalonia、Mono、Unity 3D(除WebGL)、其他(即所有C#系)

      項目功能

      1、功能導(dǎo)圖

       

      2、項目文檔

      項目特點

      1、傳統(tǒng) IOCP 與 TouchSocket 的 IOCP 模式

      TouchSocket 的 IOCP 模式與傳統(tǒng) IOCP 不同。以微軟官方示例為例,傳統(tǒng) IOCP 使用 MemoryBuffer 開辟一塊內(nèi)存,均分后給每個會話分配一個區(qū)域接收數(shù)據(jù),收到數(shù)據(jù)后再復(fù)制并處理。而 TouchSocket 則在每次接收前從內(nèi)存池中獲取一個可用內(nèi)存塊直接用于接收,收到數(shù)據(jù)后直接處理該內(nèi)存塊,從而避免了復(fù)制操作。雖然這只是細(xì)節(jié)上的設(shè)計差異,但在傳輸 10 萬次 64KB 數(shù)據(jù)時,性能提升了 10 倍。

      2、數(shù)據(jù)處理適配器

      TouchSocket 在設(shè)計時借鑒了其他產(chǎn)品的優(yōu)秀理念,數(shù)據(jù)處理適配器就是其中之一。與其他產(chǎn)品不同的是,TouchSocket 的適配器功能更加強大、易用且靈活。它不僅可以提前解析數(shù)據(jù)包,還可以解析數(shù)據(jù)對象,并且可以隨時替換,立即生效。例如,可以使用固定包頭對數(shù)據(jù)進(jìn)行預(yù)處理,從而解決數(shù)據(jù)分包和粘包問題;也可以直接解析 HTTP 數(shù)據(jù)協(xié)議和 WebSocket 數(shù)據(jù)協(xié)議等。

      3、兼容性與適配

      TouchSocket 提供多種框架模型,能夠完全兼容基于 TCP 和 UDP 協(xié)議的所有協(xié)議。例如,TcpService 和 TcpClient 的基礎(chǔ)功能與 Socket 相同,但增強了框架的堅固性和并發(fā)性,通過事件形式拋出連接和接收數(shù)據(jù),使用戶能夠更加友好地使用。

      項目使用

      1、Nuget安裝

      搜索框輸入TouchSocket,然后在搜索結(jié)果中選擇,點擊安裝,具體如下圖所示

      2、TcpService

      TcpService是Tcp系服務(wù)器基類,它不參與實際的數(shù)據(jù)交互,只是配置、激活、管理、注銷、重建SocketClient類實例。

      而SocketClient是當(dāng)TcpClient(客戶端) 成功連接服務(wù)器以后,由服務(wù)器新建的一個實例類,后續(xù)的所有通信,也都是通過該實例完成的。

      var service = new TcpService();
      service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客戶端正在連接
      service.Connected = (client, e) => { return EasyTask.CompletedTask; };//有客戶端成功連接
      service.Disconnecting = (client, e) => { return EasyTask.CompletedTask; };//有客戶端正在斷開連接,只有當(dāng)主動斷開時才有效。
      service.Disconnected = (client, e) => { return EasyTask.CompletedTask; };//有客戶端斷開連接
      service.Received = (client, e) =>
      {
          //從客戶端收到信息
          var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:數(shù)據(jù)長度是byteBlock.Len
          client.Logger.Info($"已從{client.Id}接收到信息:{mes}");
      ?
          client.Send(mes);//將收到的信息直接返回給發(fā)送方
      ?
          //client.Send("id",mes);//將收到的信息返回給特定ID的客戶端
      ?
          //將收到的信息返回給在線的所有客戶端。
          //注意:這里只是一個建議思路,實際上群發(fā)應(yīng)該使用生產(chǎn)者消費者模式設(shè)計
          //var ids = service.GetIds();
          //foreach (var clientId in ids)
          //{
          //    if (clientId != client.Id)//不給自己發(fā)
          //    {
          //        service.Send(clientId, mes);
          //    }
          //}
      ?
          return EasyTask.CompletedTask;
      };
      ?
      service.Setup(new TouchSocketConfig()//載入配置
          .SetListenIPHosts("tcp://127.0.0.1:7789", 7790)//同時監(jiān)聽兩個地址
          .ConfigureContainer(a =>//容器的配置順序應(yīng)該在最前面
          {
              a.AddConsoleLogger();//添加一個控制臺日志注入(注意:在maui中控制臺日志不可用)
          })
          .ConfigurePlugins(a =>
          {
              //a.Add();//此處可以添加插件
          }));
      ?
      service.Start();//啟動

      3、TcpClient

      TcpClient是Tcp系客戶端基類,他直接參與tcp的連接、發(fā)送、接收、處理、斷開等,他的業(yè)務(wù)與服務(wù)器的SocketClient是一一對應(yīng)的。
      var tcpClient = new TcpClient();
      tcpClient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即將連接到服務(wù)器,此時已經(jīng)創(chuàng)建socket,但是還未建立tcp
      tcpClient.Connected = (client, e) => {return EasyTask.CompletedTask; };//成功連接到服務(wù)器
      tcpClient.Disconnecting = (client, e) => {return EasyTask.CompletedTask; };//即將從服務(wù)器斷開連接。此處僅主動斷開才有效。
      tcpClient.Disconnected = (client, e) => {return EasyTask.CompletedTask; };//從服務(wù)器斷開連接,當(dāng)連接不成功時不會觸發(fā)。
      tcpClient.Received = (client, e) =>
      {
          //從服務(wù)器收到信息。但是一般byteBlock和requestInfo會根據(jù)適配器呈現(xiàn)不同的值。
          var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);
          tcpClient.Logger.Info($"客戶端接收到信息:{mes}");
          return EasyTask.CompletedTask;
      };
      ?
      //載入配置
      tcpClient.Setup(new TouchSocketConfig()
          .SetRemoteIPHost("127.0.0.1:7789")
          .ConfigureContainer(a =>
          {
              a.AddConsoleLogger();//添加一個日志注入
          }));
      ?
      tcpClient.Connect();//調(diào)用連接,當(dāng)連接不成功時,會拋出異常。
      ?
      //Result result = tcpClient.TryConnect();//或者可以調(diào)用TryConnect
      //if (result.IsSuccess())
      //{
      ?
      //}
      ?
      tcpClient.Logger.Info("客戶端成功連接");
      ?
      tcpClient.Send("RRQM");

      4、TcpClient 斷線重連

      在Config的插件配置中,使用重連插件即可。

      .ConfigurePlugins(a=> 
      {
         a.UseReconnection(5, true, 1000);//如需永遠(yuǎn)嘗試連接,tryCount設(shè)置為-1即可。
      });

      項目案例

      1、工程師軟件工具箱

      使用TouchRpc開發(fā)的一個內(nèi)部工程師軟件工具箱 。

      2、遠(yuǎn)程監(jiān)控、控制項目

      項目地址

      GitHub:https://github.com/RRQM/TouchSocket

      Gitee:https://gitee.com/RRQM_Home/TouchSocket

      文檔地址:https://touchsocket.net/

      最后

      如果你覺得這篇文章對你有幫助,不妨點個贊支持一下!你的支持是我繼續(xù)分享知識的動力。如果有任何疑問或需要進(jìn)一步的幫助,歡迎隨時留言。

      也可以加入微信公眾號[DotNet技術(shù)匠] 社區(qū),與其他熱愛技術(shù)的同行一起交流心得,共同成長!優(yōu)秀是一種習(xí)慣,歡迎大家留言學(xué)習(xí)!

      posted @ 2024-09-09 10:55  小碼編匠  閱讀(4023)  評論(8)    收藏  舉報
      主站蜘蛛池模板: 庆元县| 久久人妻无码一区二区三区av| 国产精品久久久久久亚洲色| 日产国产一区二区不卡| 成人亚欧欧美激情在线观看| 野外做受三级视频| 成人欧美一区二区三区在线观看| 99热精品毛片全部国产无缓冲| 中国少妇人妻xxxxx| 无码AV无码免费一区二区| 图片区 小说区 区 亚洲五月| 亚洲乱码中文字幕久久孕妇黑人| 开心五月婷婷综合网站| 精品无码人妻一区二区三区| 亚洲欧洲一区二区免费| 久久精品人成免费| 欧美牲交a欧美牲交aⅴ免费| 黄色A级国产免费大片视频| 人人妻人人狠人人爽| 不卡视频在线一区二区三区| 精品中文字幕一区在线| 天堂中文8资源在线8| 97精品伊人久久久大香线蕉| 99精品全国免费观看视频 | 国产精品无码专区| 免费人欧美成又黄又爽的视频| 日本高清视频网站www| 无码高潮爽到爆的喷水视频app| 国产精品系列在线免费看| 亚洲人成网站77777在线观看| 国产av成人精品播放| 久久www免费人成看片中文 | 在线天堂最新版资源| 中国亚州女人69内射少妇| 日本一区二区三区四区黄色 | 国内精品自线在拍| 久久天天躁夜夜躁狠狠85| 天堂V亚洲国产V第一次| 日韩国产成人精品视频| 国产专区一线二线三线码| 国产午夜精品一区理论片|