طريقة مناسبة للنشر والعثور على الخدمات على شبكة محلية باستخدام Python

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

سؤال

يفتح تطبيقي مقبس TCP وينتظر البيانات من المستخدمين الآخرين على الشبكة باستخدام نفس التطبيق. في الوقت نفسه ، يمكنه بث البيانات إلى مضيف محدد على الشبكة.

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

هل Bonjour/Zeroconf هو الطريق الصحيح للذهاب لإنجاز هذا؟ (أود أن يكون منصة OSX/WIN/*NIX)

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

المحلول

يمكنه بث البيانات إلى مضيف محدد على الشبكة

هذا هو غير لازمة.

أفترض أنك لا تعني البث بالفعل ، تقصد أحادي أو مجرد "إرسال"؟

هل Bonjour/Zeroconf هو الطريق الصحيح للذهاب لإنجاز هذا؟

هذا يعتمد حقًا على بيئتك المستهدفة وما يهدف تطبيقك إلى القيام به.

كما يشير Ignacio ، تحتاج إلى تثبيت برنامج Apple على Windows لـ ZeroconF/MDNS للعمل في الوقت الحالي.

قد يكون هذا مناسبًا للمكتب / الاستخدام المنزلي الصغير.


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

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

يمكن أن يكون عبر خيار DHCP ، أو عن طريق سجلات خدمة DNS .. في هذه الحالات ، ربما تكتب خادمًا قابلاً للاستعلام لتتبع العملاء النشطين .. يشبه إلى حد كبير تعقب BitTorrent.

شيئان يجب مراعاتهما أثناء تصميم تطبيقك المتوازن:

  • هل سيكون هناك سبب لتشغيل أكثر من "تثبيت" لتطبيقك على شبكة؟
  • فكر دائمًا في الآثار المترتبة على الإصدار: عميل واحد أكثر من الآن أكثر من الآخر ، هل لا يزالون يتحدثون مع بعضهم البعض أو على الأقل يفشلون بأمان؟

نصائح أخرى

Zeroconf/DNS-SD هي فكرة ممتازة في هذه الحالة. يتم توفيره بواسطة Bonjour على OS X و Windows (ولكن يجب تثبيته بشكل منفصل أو كجزء من منتج Apple على Windows) ، و Avahi على foss *nix.

أعتقد أن Zeroconf بداية جيدة للغاية. قد تجد هذا المستند مفيد.

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

<dl_service updated="2010-12-03 11:55:40+01:00">
 <client name="internal" ip="10.0.23.234" external_ip="1.1.1.1"/> 
 <client name="bigone" ip="2.2.2.2" external_ip="2.2.2.2">
  <messsage type="connect" from="Bigone" to="internal" />
 </client> 
</dl_service>

كانت فكرتي الأولية هي إضافة جدار الحماية كل ذلك ، لكنني لا يمكن أن أزعجني الكثير من المضيفين حيث استخدام IPs الخارجية ليكون مشكلة ..

لكنني أوصي حقًا ZeroconF ، على الأقل إذا كنت تستخدم Linux+MacOSX ، فلا تعرف Windows على الإطلاق.

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