أون | 中
لا داعي للقلق بشأن هذا الأمر.
"TouchSocket" هو إطار عمل اتصالات شبكة قوي وسهل الاستخدام للغات مثل C# وVB.Net وF#. يوفر مجموعة متنوعة من وحدات الاتصال، بما في ذلك TCP، وUDP، وSSL، وWebSocket، وModbus، وما إلى ذلك. وهو يدعم حل مشكلة التعاقد من الباطن على حزم TCP ومجموعة أجزاء حزم UDP الكبيرة. يدعم إطار العمل مجموعة متنوعة من قوالب البروتوكول لتحليل حزم البيانات بسرعة مثل الرؤوس الثابتة والأطوال الثابتة وأحرف الفاصل الزمني.
إن IOCP الخاص بـ TouchSocket ليس هو نفسه التقليدي، فقط خذ مثال Microsoft الرسمي كمثال، فهو يستخدم MemoryBuffer لفتح جزء من الذاكرة، وتقسيمها بالتساوي، ثم تخصيص منطقة لكل جلسة لتلقيها، وبعد ذلك انسخ البيانات المستلمة، ثم قم بمعالجة البيانات المنسوخة. يقوم TouchSocket بأخذ كتلة ذاكرة قابلة للاستخدام من مجمع الذاكرة قبل كل عملية استقبال، ثم استخدامها مباشرة للاستقبال، وبعد استلام البيانات، يتم طرح كتلة الذاكرة مباشرة للمعالجة، وذلك لتجنب عملية النسخ ، على الرغم من إنه مجرد تصميم صغير، ولكن عند إرسال بيانات 10 واط × 64 كيلو بايت ، يكون فرق الأداء 10 مرات .
أعتقد أن الجميع قد استخدم منتجات المقبس الأخرى، لذلك تم تصميم TouchSocket أيضًا للتعلم من مفهوم التصميم الممتاز للمنتجات الأخرى، ومحول معالجة البيانات هو أحدها، ولكن على عكس تصميم المنتجات الأخرى، فإن محول TouchSocket أكثر قوة و سهل الاستخدام. ومرنة. لا يمكنه تحليل الحزم مقدمًا فحسب، بل يمكنه أيضًا تحليل كائنات البيانات، والتي يمكن استبدالها في أي وقت ثم تصبح سارية المفعول على الفور. على سبيل المثال، يمكنك استخدام رأس حزمة ثابتة للمعالجة المسبقة للبيانات، وذلك لحل مشكلة التعاقد من الباطن على البيانات والحزمة اللاصقة. يمكنه أيضًا تحليل بروتوكول بيانات HTTP وبروتوكول بيانات WebSocket وما إلى ذلك مباشرةً.
يوفر TouchSocket مجموعة متنوعة من نماذج الإطارات وهو متوافق تمامًا مع جميع البروتوكولات القائمة على بروتوكولات TCP وUDP. على سبيل المثال، يتمتع كل من TcpService وTcpClient بنفس الوظائف الأساسية التي تتمتع بها المقابس، لكنهما يعززان قوة وتزامن إطار العمل، ويرسلان الاتصال والبيانات المستلمة في شكل أحداث، بحيث يمكن للمستخدمين استخدامها بشكل أكثر سهولة في الاستخدام.
ما يلي هو مجرد مثال بسيط لكيفية إنشاء مثال، يرجى مراجعة الوثائق لمزيد من التفاصيل.
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");
في تكوين المكون الإضافي للتكوين، يمكنك استخدام المكون الإضافي لإعادة الاتصال.
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
يحل المحول بشكل أساسي مشكلة التصاق Tcp وتعبئته، ويعتمد تنسيق البيانات وضع "Baotou + Data Body" البسيط والفعال، والذي يدعم فيه Baotou:
تستخدم جميع رؤوس البيانات المذكورة أعلاه الوضع الجانبي الافتراضي (وضع النهاية الصغيرة) لـ TouchSocketBitConverter، ويمكن للمستخدمين تبديل الوضع الجانبي الافتراضي وفقًا لاحتياجاتهم.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
يساعد محول الرأس الثابت المحدد من قبل المستخدم المستخدمين بشكل أساسي على حل معلومات إطار البيانات باستخدام الرؤوس الثابتة. على سبيل المثال، تحتاج تنسيقات البيانات التالية فقط إلى تنفيذ بعض الواجهات لإكمال التحليل، يرجى الرجوع إلى واجهة برمجة التطبيقات للحصول على التفاصيل.
|1|1|1|************|
يساعد محول الرأس غير الثابت المحدد من قبل المستخدم المستخدمين بشكل أساسي على حل مشكلة معلومات إطار البيانات ذات الرؤوس غير الثابتة. على سبيل المثال، تحتوي حزم HTTP الأكثر شيوعًا على رأس بيانات مفصول عن نص البيانات بـ "rn"، ولم يتم إصلاح رأس البيانات بسبب اختلاف معلومات الطلب الخاصة بالطالب، كما أن طول نص البيانات هو تم تحديده أيضًا بشكل صريح بواسطة قيمة ContentLength لرأس البيانات، لذا يمكنك التفكير في استخدام CustomUnfixedHeaderDataHandlingAdapter للتحليل، والذي يمكن تحقيقه أيضًا من خلال التطوير البسيط.
نشكرك على دعمك لـ TouchSocket، إذا كانت لديك أي أسئلة أخرى، فيرجى إرسال مشكلة أو الانضمام إلى مجموعة QQ: 234762506 للمناقشة.
بفضل دعم الأدوات التالية
تمت إضافة مشروع TouchSocket إلى مؤسسة dotNET China.