엔 | 中
三十功name尘与土,八千里路云和月。
'TouchSocket'은 C#, VB.Net, F#과 같은 언어를 위한 강력하고 사용하기 쉬운 .NET 네트워크 통신 프레임워크입니다. TCP, UDP, SSL, WebSocket, Modbus 등을 포함한 다양한 통신 모듈을 제공합니다. TCP 패킷 하청 및 UDP 대규모 패킷 조각 조합 문제 해결을 지원합니다. 프레임워크는 고정 헤더, 고정 길이 및 간격 문자와 같은 데이터 패킷을 빠르게 구문 분석하기 위해 다양한 프로토콜 템플릿을 지원합니다.
TouchSocket의 IOCP는 기존 IOCP와 동일하지 않습니다. Microsoft의 공식 예를 예로 들면, 그는 MemoryBuffer를 사용하여 메모리 조각을 열고 균등하게 나눈 다음 수신할 각 세션에 영역을 할당한 다음 수신된 데이터를 복사한 후 복사된 데이터를 처리합니다. TouchSocket은 각 수신 전에 메모리 풀에서 사용 가능한 메모리 블록을 가져와서 수신에 직접 사용하고, 데이터를 수신한 후에는 복사 작업을 피하기 위해 메모리 블록을 처리를 위해 직접 버립니다. 작은 디자인일 뿐이지만 10w x 64kb 데이터를 전송하면 10배의 성능 차이가 납니다.
다들 다른 소켓 제품을 사용해 보셨을 거라 생각해서 터치소켓도 다른 제품의 뛰어난 디자인 컨셉을 배워서 디자인한 것인데, 데이터 처리 어댑터도 그 중 하나인데, 다른 제품의 디자인과 달리 터치소켓의 어댑터가 더 강력하고 사용하기 쉽습니다. 그리고 유연합니다. 패킷을 미리 구문 분석할 수 있을 뿐만 아니라 언제든지 교체하여 즉시 적용할 수 있는 데이터 개체도 구문 분석할 수 있습니다. 예를 들어 고정 패킷 헤더를 사용하여 데이터를 전처리하면 데이터 하청 및 고정 패킷 문제를 해결할 수 있습니다. 또한 HTTP 데이터 프로토콜, WebSocket 데이터 프로토콜 등을 직접 구문 분석할 수도 있습니다.
TouchSocket은 다양한 프레임워크 모델을 제공하며 TCP 및 UDP 프로토콜을 기반으로 하는 모든 프로토콜과 완벽하게 호환됩니다. 예를 들어 TcpService와 TcpClient는 Sockets와 기본 기능은 동일하지만 프레임워크의 견고성과 동시성을 강화하고 연결 및 수신된 데이터를 이벤트 형태로 발생시켜 사용자가 보다 사용자 친화적으로 사용할 수 있도록 합니다.
다음은 예제를 만드는 방법에 대한 간단한 예입니다. 자세한 내용은 설명서를 참조하세요.
TcpService service = new TcpService();
service.Connecting = (client, e) => {return EasyTask.CompletedTask; };//有客户端正在连接
service.Connected = (client, e) => {return EasyTask.CompletedTask; };//有客户端连接
service.Disconnected = (client, e) => {return EasyTask.CompletedTask; };//有客户端断开连接
service.Received = (client, e) =>
{
//Received information from the client
string mes = e.ByteBlock.Span.ToString(Encoding.UTF8);
Console.WriteLine($"Removed from {client. ID} Message received: {}");
return EasyTask.CompletedTask;
};
await service.StartAsync(7789);//Start
TcpClient tcpClient = new TcpClient();
tcpClient.Connected = (client, e) => {return EasyTask.CompletedTask; };//Successfully connected to the server
tcpClient.Disconnected = (client, e) => {return EasyTask.CompletedTask; };//Disconnect from the server, which is not triggered when the connection is unsuccessful.
tcpClient.Received = (client, e) =>
{
//Information is received from the server
string mes = e.ByteBlock.Span.ToString(Encoding.UTF8);
Console.WriteLine($"Message received: {mes}");
return EasyTask.CompletedTask;
};
await tcpClient.ConnectAsync("127.0.0.1:7789");
await tcpClient.SendAsync("Hello");
Config의 플러그인 구성에서 재연결 플러그인을 사용할 수 있습니다.
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
어댑터는 주로 Tcp 고착 및 패킹 문제를 해결하며 데이터 형식은 Baotou가 지원하는 간단하고 효율적인 "Baotou + 데이터 본문" 모드를 채택합니다.
위의 데이터 헤더는 모두 TouchSocketBitConverter의 기본 측면 모드(리틀 엔드 모드)를 사용하며 사용자는 필요에 따라 기본 측면 모드를 전환할 수 있습니다.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
사용자 정의 고정 헤더 어댑터는 주로 사용자가 고정 헤더로 데이터 프레임 정보를 해결하는 데 도움이 됩니다. 예를 들어, 다음 데이터 형식은 구문 분석을 완료하기 위해 몇 가지 인터페이스만 구현하면 됩니다. 자세한 내용은 API를 참조하세요.
|1|1|1|**********|
사용자 정의 고정되지 않은 헤더 어댑터는 주로 사용자가 고정되지 않은 헤더가 있는 데이터 프레임 정보 문제를 해결하는 데 도움이 됩니다. 예를 들어, 가장 일반적인 HTTP 패킷은 데이터 바디와 "rn"으로 구분된 데이터 헤더를 가지고 있는데, 요청자의 요청 정보가 다르기 때문에 데이터 헤더가 고정되어 있지 않으며, 데이터 바디의 길이는 또한 데이터 헤더의 ContentLength 값으로 명시적으로 지정되므로 CustomUnfixedHeaderDataHandlingAdapter를 사용하여 구문 분석하는 것을 고려할 수 있으며 이는 간단한 개발을 통해 달성할 수도 있습니다.
TouchSocket에 대한 귀하의 지원에 감사드립니다. 다른 질문이 있는 경우 문제를 제출하거나 QQ: 234762506 그룹에 가입하여 토론하십시오.
다음 도구의 지원 덕분에
TouchSocket 프로젝트가 dotNET China 조직에 추가되었습니다.