En | 中
三十功名尘与土,八千里路云和月。
TouchSocket — это мощная и простая в использовании платформа сетевых коммуникаций .NET для таких языков, как C#, VB.Net и F#. Он предоставляет различные коммуникационные модули, включая TCP, UDP, SSL, WebSocket, Modbus и т. д. Он поддерживает решение проблемы субподряда TCP-пакетов и комбинации больших фрагментов пакетов UDP. Платформа поддерживает множество шаблонов протоколов для быстрого анализа пакетов данных, таких как фиксированные заголовки, фиксированная длина и интервальные символы.
IOCP TouchSocket не такой, как традиционный, просто возьмите в качестве примера официальный пример Microsoft, он использует MemoryBuffer, чтобы открыть кусок памяти, разделить его поровну, а затем назначить зону каждому сеансу для приема, а затем скопируйте полученные данные, а затем обработайте скопированные данные. TouchSocket должен перед каждым приемом брать полезный блок памяти из пула памяти, а затем использовать его непосредственно для приема, а после получения данных блок памяти напрямую выбрасывается на обработку, чтобы избежать операции копирования , хотя это всего лишь небольшая конструкция, но при передаче данных 10 Вт и 64 КБ разница в производительности составляет 10 раз .
Я считаю, что все использовали другие продукты Socket, поэтому TouchSocket также разработан с учетом превосходной концепции дизайна других продуктов, адаптер обработки данных является одним из них, но в отличие от дизайна других продуктов, адаптер TouchSocket более мощный и простой в использовании. и гибкий. Он может не только анализировать пакеты заранее, но также анализировать объекты данных, которые можно заменить в любое время, а затем немедленно вступить в силу. Например, вы можете использовать фиксированный заголовок пакета для предварительной обработки данных, чтобы решить проблему субподряда данных и закрепления пакетов. Он также может напрямую анализировать протокол данных 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 + Data Body», в котором Baotou поддерживает:
Все приведенные выше заголовки данных используют боковой режим по умолчанию (режим младшего конца) TouchSocketBitConverter, и пользователи могут переключать боковой режим по умолчанию в соответствии со своими потребностями.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
Определяемый пользователем адаптер с фиксированным заголовком в основном помогает пользователям обрабатывать информацию кадра данных с помощью фиксированных заголовков. Например, для выполнения анализа следующие форматы данных должны реализовать только несколько интерфейсов. Подробную информацию см. в API.
|1|1|1|************|
Определяемый пользователем адаптер нефиксированного заголовка в основном помогает пользователям решить проблему информации кадра данных с нефиксированными заголовками. Например, наиболее типичные HTTP-пакеты имеют заголовок данных, отделенный от тела данных символом «rn», причем заголовок данных не фиксирован из-за различной информации запроса запрашивающей стороны, а длина тела данных равна также явно указывается значением ContentLength заголовка данных, поэтому вы можете рассмотреть возможность использования CustomUnfixedHeaderDataHandlingAdapter для анализа, чего также можно достичь путем простой разработки.
Благодарим вас за поддержку TouchSocket. Если у вас есть другие вопросы, отправьте сообщение о проблеме или присоединитесь к группе QQ: 234762506 для обсуждения.
Благодаря поддержке следующих инструментов
Проект TouchSocket был добавлен в организацию dotNET China.