إرسال واستقبال رسائل Protobuf¶
تختلف عملية إرسال واستقبال الرسالة بين معايير TCP و WebSocket. أدناه، نشرح هذه العملية بالتفصيل لكلا النوعين من الاتصالات.
استخدام TCP ¶
إرسال رسالة ¶
لإرسال رسالة عبر اتصال TCP، قم بما يلي:
-
قم بتغيير رسالة Protobuf إلى مصفوفة من البايتات (باستخدام ترميز Protobuf) باستخدام SDK الرسمي لـ Google Protocol Buffer للغة البرمجة التي اخترتها.
-
احصل على طول المصفوفة التي تم إنشاؤها خلال الخطوة 1. قم بإنشاء مصفوفة بايت جديدة من هذا العدد الصحيح. اعكس مصفوفة البايت الجديدة.
-
اجمع مصفوفة البايت الجديدة ومصفوفة البايت التي تحتوي على رسالة Protobuf الأصلية.
-
أرسل المصفوفة المجمعة إلى دفق الاتصال.
توضح الأمثلة أدناه كيف يتم تنفيذ هذه الخطوات في SDK الرسمية لـ Open API.
1 2 3 4 5 6 7 | |
1 2 3 | |
مثال Python
باستخدام Twisted، يقوم مثال Python بتنفيذ نفس العمليات تقريباً مثل C#. يمكن شرح client.send(request) كما يلي.
1 2 3 | |
Protocol.transport.write(). قراءة رسالة ¶
الكود غير المتزامن
تعتمد جميع مكتبات Open API SDK على التنفيذ غير المتزامن، مما يعني أنها لا تنتظر وصول الرسائل ولكن بدلاً من ذلك تتفاعل مع الرسائل الواردة ديناميكياً. نتيجة لذلك، عادةً ما يتم استلام الرسالة عبر معالجات الأحداث
لقراءة رسالة، سيتعين عليك تنفيذ سلسلة من الإجراءات التي تعكس الخطوات المطلوبة لإرسال رسالة.
-
استلام أول أربعة بايت من مصفوفة البايت (تذكر، تشير إلى طول الرسالة). اعكس هذه البايتات الأربعة وقم بتحويلها إلى عدد صحيح.
-
اقرأ
Xبايت من التدفق حيثXهو العدد الصحيح الذي حصلت عليه خلال الخطوة 1. -
استخدم مكتبة Google Protobuf SDK لفك تسلسل الرسالة إلى
ProtoMessageصالحة. -
استخدم حقل
payloadTypeمن كائنProtoMessageللعثور على نوعه الفعلي. عبر مكتبة Google Protobuf SDK، قم بتغييرProtoMessageإلى كائن من نوعProtoOA...المطلوب.
توضح مقتطفات الكود أدناه كيف تتعامل مكتبات Open API SDK الرسمية مع قراءة الرسائل.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
مثال Python
في مثال Python، تتم معالجة جميع العمليات مع البايتات عند استلام الرسائل بواسطة طريقة dataReceived() كما هو موضح أدناه.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 | |
استخدام WebSocket ¶
إرسال رسالة ¶
لإرسال رسالة عبر اتصال WebSocket، قم بتنفيذ الإجراءات التالية:
-
قم بتسلسل الرسالة إلى أي تنسيق بيانات مناسب (على سبيل المثال، سلسلة نصية).
-
أضف الرسالة المتسلسلة إلى قائمة الإرسال الخاصة بك.
توضح الأمثلة أدناه كيف يتم تنفيذ هذه الإجراءات في مكتبات Open API SDK الرسمية.
تستخدم مكتبة C# SDK فئة WebsocketClient وهي جزء من حزمة Websocket.Client. كما هو موضح أدناه، تعمل طريقة WebsocketClient.Send() كما يلي.
1 2 3 4 5 | |
كما ترى، يقوم العميل ببساطة بإضافة قطعة المصفوفة إلى قائمة الإرسال.
لا تدعم حزمة تطوير البرمجيات SDK لـ Python معيار WebSocket.
استلام رسالة ¶
لاستلام رسالة عبر اتصال WebSocket، قم بما يلي:
-
استرجع البيانات المستلمة من خادم cTrader.
-
قم بفك تسلسل البيانات إلى رسالة Protobuf صالحة.
للتوضيح حول كيفية تنفيذ ذلك في مكتبات Open API SDK الرسمية، انظر المقتطفات أدناه.
لاستلام الرسائل، يحتاج WebsocketClient إلى الاشتراك في دالة رد النداء التي تتعامل مع ما يفعله العميل عند قبول رسالة جديدة.
1 2 | |
قبل الاشتراك، تقوم مكتبة .NET SDK بتحليل الرسالة إلى رسالة Protobuf. تتم إضافة الاشتراكات اللازمة في نص دالة رد النداء ConnectWebSocket().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
في دالة رد النداء OnNext()، يتم تمرير ProtoMessage إلى دالة رد النداء MessageFactory.GetMessage().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
لا تدعم حزمة تطوير البرمجيات SDK لـ Python معيار WebSocket.