غير متزامن متعدد الاتجاه الخادم-العميل الاتصال على نفسه فتح المقبس?

StackOverflow https://stackoverflow.com/questions/1241

  •  08-06-2019
  •  | 
  •  

سؤال

لدي عميل ملقم التطبيق حيث العميل على جهاز ويندوز موبايل 6 الجهاز مكتوب في C + + و server على ويندوز كامل و مكتوب في C#.

أصلا أنا فقط بحاجة إلى إرسال الرسائل من العميل إلى الملقم مع الخادم فقط من أي وقت مضى بإرسال إقرار أنه تلقى الرسالة.الآن أود أن التحديث بحيث الخادم بإمكانك إرسال رسالة إلى العميل طلب البيانات.وأنا حاليا قد أنشأت لذلك العميل هو فقط في وضع استلام بعد ذلك يرسل البيانات إلى الخادم, هذا لا يسمح الملقم لإرسال طلب في أي وقت.وأنا سوف تضطر إلى الانتظار للحصول على بيانات العميل.أول فكرة إنشاء مؤشر ترابط آخر على العميل منفصل فتح المقبس, الاستماع طلبات الخادم...مثل الخادم بالفعل في احترام العميل.هل هناك طريقة داخل نفس الموضوع و باستخدام نفس المقبس, على كل خادم أن ترسل الطلبات في أي وقت ؟

يمكنك استخدام ما تأثير WaitForMultipleObjects() وتمرير ذلك تلقي المخزن المؤقت و حدث أن يقول هناك البيانات التي يتم إرسالها ؟

هل كانت مفيدة؟

المحلول

عندما كنت في حاجة لكتابة الطلب مع نموذج خدمة العملاء حيث يمكن للعملاء ترك وأدخل وقتما يريدون ، (أعتقد أن هذا هو الحال أيضا بالنسبة إلى التطبيق الخاص بك كما يمكنك استخدام الأجهزة النقالة) أنا على يقين من أن العملاء إرسال على الانترنت رسالة إلى الخادم ، مشيرا إلى أنهم كانوا على اتصال وعلى استعداد للقيام بكل ما يحتاجونه به.

في ذلك الوقت الخادم يمكن إرسال الرسائل إلى العميل الحوض نفس اتصال مفتوح.

أيضا, ولكن أنا لا أعرف إذا كان هذا هو الواجب التطبيق بالنسبة لك, كان نوعا من ضربات القلب العملاء إرسالها إلى الملقم, السماح لها أعرف أنه كان لا يزال على الانترنت.هكذا الخادم يعرف عند عميل بالقوة قطع الاتصال من الشبكة و يمكن أن مارك أن العميل كما هو حاليا.

نصائح أخرى

استخدام التواصل غير المتزامن من الممكن تماما في موضوع واحد!

وهناك نمط التصميم في شبكة تطوير البرمجيات يسمى المفاعل نمط (ننظر في هذا الكتاب).بعضها معروف مكتبة شبكة يوفر تنفيذ هذا النمط (انظر ACE).

لفترة وجيزة ، المفاعل هو كائن ، يمكنك تسجيل كل ما تبذلونه من مآخذ في الداخل, و كنت انتظر شيء.إذا حدث شيء ما (البيانات الجديدة وصلت, اتصال وثيق...) المفاعل سوف يخطر لك.وبالطبع يمكنك استخدام واحد فقط مأخذ إرسال وتلقى البيانات بشكل غير متزامن.

أنا لست واضحة بشأن ما إذا كان أو لا كنت ترغب في إضافة غير متزامن بت إلى الخادم في C# أو العميل في C++.

إذا كنت تتحدث عن فعل هذا في C++, سطح المكتب أنظمة تشغيل ويندوز يمكن أن تفعل مأخذ I/O بشكل غير متزامن من خلال API التي تستخدم تتداخل I/O.عن مآخذ ، WSASend, WSARecv كل تسمح المتزامن (I/O قراءة الوثائق على LPOVERLAPPED المعلمات التي يمكنك ملء مع الأحداث التي تحصل عند تعيين I/O يكمل).

أنا لا أعرف إذا كان ويندوز موبايل المنصات تدعم هذه الوظائف ، لذلك قد تضطر إلى القيام ببعض حفر إضافية.

تحقق من اسيو.هذا هو الصليب متوافق c++ مكتبة asyncronous IO.أنا لست متأكدا مما إذا كان هذا سيكون مفيدا الخادم ( لم يسبق لي أن حاولت ربط معيار c++ DLL إلى مشروع c#) ولكن العميل سيكون من المفيد.

نستخدمها مع التطبيق لدينا ، و حل معظم IO مشاكل التزامن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top