سؤال

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

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

هل تعتقد أن هذا النظام سيعمل بشكل جيد؟ إذا كان الأمر كذلك، فهل لديك أي اقتراحات حول كيفية القيام الخيوط؟ أي فصول NS يمكنك توجيه لي في؟ يجب أن يكون هناك نوع من قائمة الانتظار التي يمكنني استخدامها، وأفكر.

أي أفكار أخرى؟

تحرير: لا أتوقع عد العميل للحصول على ما فوق 50 أو نحو ذلك، في الحد الأقصى.

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

المحلول

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

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

[remoteServer update:client];

من العميل أو

[[remoteClientList objectAtIndex:i] update:server];

من الخادم. سأترك تفاصيل إعداد الاتصال وللحصول على إعادة التعلامات أو مرجع Remoteclient إليك بعد قراءة دليل برمجة الكائنات الموزعة.

الجانب السلبي لاستخدام القيام به هو أنك مرتبط بككوا؛ سيكون ذلك جدا من الصعب كتابة عميل أو خادم غير كاكاو يتصل باستخدام الكائنات المشاواة. إذا كانت هناك فرصة قد ترغب في إجراء تطبيقات عميل أو خادم غير كاكاو، فيجب ألا تستخدم القيام به. في هذه الحالة، أود أن أوصي بشيء بسيط مع الكثير من الدعم عبر المنصة واللغة. API على طراز الراحة عبر HTTP هو خيار جيد. إلقاء نظرة على الكاكاو نظام تحميل URL. وثائق معلومات حول كيفية تنفيذ طلبات HTTP والردود. إلقاء نظرة على أبل cocoahttpserver. مثال الرمز أو رمز kode.google.com نفس الاسم للحصول على معلومات حول تنفيذ خادم HTTP في رمز الكاكاو الخاص بك.

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

نصائح أخرى

عندما يرسل الخادم تحديثات للعملاء، فمن المحتمل أن يكون من الأسهل فقط أن يكون له موضوع واحد تعامل معهم جميعا، واستخدام مآخذ ASYNC. بالطبع هذا يعتمد على عدد العملاء الذين كان عليك التعامل معهم أيضا.

هناك العديد من أمثلة الشبكات في جانب مطور Apple. واحد أود أن أوصي بالتسجيل هو urlcache، والتي يمكن تنزيلها. نقلا عن وثائق Apple لهذا المثال:

urlcache هو نموذج تطبيق iPhone يعرض كيفية تنزيل مورد إيقاف تشغيل الويب، ثم قم بتخزينه في دليل بيانات التطبيق، واستخدم النسخة المحلية للمورد. يوضح URLCACHACHE أيضا كيفية تنفيذ بضع سياسات التخزين المؤقت:

خيار مثير للاهتمام هو blip. البروتوكول من جينز ألفك. وبعد انها مثل نسخة تجريدية من زمارة: نظام الشبكات الموجهة للرسائل. إنه يوفر بشكل أساسي التجريدات المنخفضة المستوى لتسليب رسالة ثنائية الاتجاه حتى تتمكن من التركيز على تطبق بروتوكول الاتصال الخاص بك على رأسه.

لديها بعض المتابعين الجدولين مثل ماركوس الزردرا (مؤلف الكتاب المقدس Coredata) وجوس مولر من برامج اللحوم الطائر.

لا أعرف كيف تخطط لتصميم نظامك، ولكن عادة ما لا يتصل الخادم بالعميل؛ يجب على العميل بدء الاتصال. مع حد أدنى حد من 50 عميلا، قد لا تنظر إلى تنفيذ خادم / عميل على الويب ...

ومع ذلك، هناك أساسيا طريقتان للتعامل مع اتصالات خادم العميل: 1. استطلاع العميل في الخادم بشكل دوري للحصول على التحديثات 2. يحتفظ العميل باتصال مفتوحا على الخادم ويبدو الخادم مع معروف جيدا (كما في كلا الجانبين فهم ذلك) البروتوكول.

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