هل مضمون RPCs الملتوية للوصول بالترتيب؟
-
29-09-2019 - |
سؤال
أنا أستخدم Twisted لتنفيذ عميل وخادم. لقد قمت بإعداد RPC بين العميل والخادم. لذلك على العميل أفعل protocol.REQUEST_UPDATE_STATS(stats)
, الذي يترجم إلى إرسال رسالة مع transport.write
على نقل العميل الذي هو بعض النسخة المشفرة من ["update_stats", stats]
. عندما يتلقى الخادم هذه الرسالة ، dataReceived
تسمى الوظيفة على بروتوكول الخادم ، ويفككها ، وتستدعي وظيفة بناءً على الرسالة ، مثل CMD_UPDATE_STATS(stats)
في هذه الحالة.
إذا ، على العميل ، أفعل شيئًا مثل:
protocol.REQUEST_UPDATE_STATS("stats1")
protocol.REQUEST_UPDATE_STATS("stats2")
... هل أنا مضمون أن "stats1"
تصل الرسالة قبل "stats2"
رسالة على الخادم؟
تحديث: تم تحريره لمزيد من الوضوح. ولكن الآن يبدو الجواب واضحًا - بأي حال من الأحوال.
المحلول
سيصلون بالترتيب الذي يتم استلام الطلب من خلال عملية بيثون. يتضمن ذلك وقت إعداد الاتصال بالإضافة إلى الحزم التي تحتوي على بيانات الطلب. لذلك ، لا ، هذا ليس مضمونًا ليكون الأمر الذي أرسلته عمليات الإرسال إلى الطلب ، بسبب زمن انتقال الشبكة ، وحزم المسقط ، وقائمة الانتظار من جانب المرسل ، وما إلى ذلك.
لكن نعم ، بشكل عام ، يمكنك الاعتماد عليها يتم تسليمها بالترتيب طالما أنها مفصولة بفترة زمنية كبيرة نسبيًا (100 من MS عبر الإنترنت).