En | 中
三十功名尘与土,八千里路云和月。
'TouchSocket' adalah kerangka komunikasi jaringan .NET yang kuat dan mudah digunakan untuk bahasa seperti C#, VB.Net, dan F#. Ini menyediakan berbagai modul komunikasi, termasuk TCP, UDP, SSL, WebSocket, Modbus, dll. Ini mendukung penyelesaian masalah subkontrak paket TCP dan kombinasi fragmen paket besar UDP. Kerangka kerja ini mendukung berbagai templat protokol untuk mengurai paket data dengan cepat seperti header tetap, panjang tetap, dan karakter interval.
IOCP TouchSocket tidak sama dengan yang tradisional, ambil saja contoh resmi Microsoft sebagai contoh, dia menggunakan MemoryBuffer untuk membuka sebagian memori, membaginya secara merata, dan kemudian menetapkan zona untuk setiap sesi untuk menerima, dan kemudian salin data yang diterima, lalu proses data yang disalin. TouchSocket adalah mengambil blok memori yang dapat digunakan dari kumpulan memori sebelum setiap penerimaan, dan kemudian menggunakannya secara langsung untuk menerima, dan setelah menerima data, blok memori langsung dibuang untuk diproses, untuk menghindari operasi penyalinan , meskipun ini hanya desainnya yang kecil, tetapi ketika mentransmisikan data 10w kali 64kb , perbedaan kinerjanya adalah 10 kali lipat .
Saya yakin semua orang telah menggunakan produk Socket lainnya, jadi TouchSocket juga dirancang untuk belajar dari konsep desain unggulan produk lain, adaptor pemrosesan data adalah salah satunya, namun tidak seperti desain produk lain, adaptor TouchSocket lebih bertenaga dan mudah digunakan. dan fleksibel. Tidak hanya dapat mengurai paket terlebih dahulu, tetapi juga dapat mengurai objek data, yang dapat diganti kapan saja dan kemudian segera diterapkan. Misalnya, Anda dapat menggunakan header paket tetap untuk memproses data terlebih dahulu, sehingga dapat memecahkan masalah subkontrak data dan paket lengket. Itu juga dapat secara langsung mengurai protokol data HTTP, protokol data WebSocket, dll.
TouchSocket menyediakan berbagai model kerangka kerja dan sepenuhnya kompatibel dengan semua protokol berdasarkan protokol TCP dan UDP. Misalnya, TcpService dan TcpClient memiliki fungsi dasar yang sama dengan Sockets, namun keduanya meningkatkan ketahanan dan konkurensi kerangka kerja, serta membuang koneksi dan data yang diterima dalam bentuk peristiwa, sehingga pengguna dapat menggunakannya dengan lebih ramah pengguna.
Berikut ini hanyalah contoh sederhana cara membuat contoh, silakan lihat Dokumentasi untuk lebih jelasnya.
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");
Dalam konfigurasi plugin Config, Anda dapat menggunakan plugin koneksi ulang.
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
Adaptor ini terutama memecahkan masalah pelekatan dan pengepakan Tcp, dan format data mengadopsi mode "Baotou + Badan Data" yang sederhana dan efisien, di mana Baotou mendukung:
Semua header data di atas menggunakan mode sisi default (mode ujung kecil) dari TouchSocketBitConverter, dan pengguna dapat mengganti mode sisi default sesuai kebutuhan mereka.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
Adaptor header tetap yang ditentukan pengguna terutama membantu pengguna memecahkan informasi bingkai data dengan header tetap. Misalnya, format data berikut hanya perlu mengimplementasikan beberapa antarmuka untuk menyelesaikan penguraian, silakan merujuk ke API untuk detailnya.
|1|1|1|*********|
Adaptor header tidak tetap yang ditentukan pengguna terutama membantu pengguna memecahkan masalah informasi bingkai data dengan header tidak tetap. Misalnya, paket HTTP yang paling umum memiliki header data yang dipisahkan dari badan data dengan "rn", dan header data tidak tetap karena informasi permintaan yang berbeda dari pemohon, dan panjang badan data adalah juga secara eksplisit ditentukan oleh nilai ContentLength header data, sehingga Anda dapat mempertimbangkan untuk menggunakan CustomUnfixedHeaderDataHandlingAdapter untuk menguraikannya, yang juga dapat dicapai melalui pengembangan sederhana.
Terima kasih atas dukungan Anda terhadap TouchSocket, jika Anda memiliki pertanyaan lain, silakan kirimkan Masalah, atau bergabunglah dengan grup QQ: 234762506 untuk berdiskusi.
Berkat dukungan alat-alat berikut
Proyek TouchSocket telah ditambahkan ke organisasi dotNET China.