امروز سه شنبه ، ۱۴۰۱/۰۳/۰۳
بدان

نظیر به نظیر چیست؟ | What is Peer-to-peer?

نظیر به نظیر چیست؟

این صفحه مقدمه ای اساسی در زمینه توسعه برنامه های همتا به همتا (P2P) است.

در پایان آن ، شما باید مفاهیم و ساختار برنامه نویسی لازم برای پیاده سازی پروتکل P2P و / یا برنامه کاربردی را درک کنید.

اولین چیزی که ما نیاز داریم این است که دقیقاً منظور از "P2P" را بفهمیم.

به طور خلاصه ، برنامه های P2P منابع موجود در لبه های اینترنت را به صورت غیرمتمرکز ، بدون تعامل کم یا بدون هیچ گونه ارتباط با سرورهای متمرکز ، سازماندهی و مدیریت می کنند.

منابع ممکن است ذخیره سازی یا محتوا (به عنوان مثال برنامه های اشتراک فایل) ، چرخه پردازنده (به عنوان مثال چارچوب SETI یا سایر برنامه هایی که از رایانه شما برای انجام بخشی از کارهای بزرگ و توزیع شده در حالت بیکار استفاده می کنند) ، یا وجود انسان (پیام رسانی فوری) )

از آنجا که چنین منابعی در لبه اینترنت معمولاً زودگذر است (ممکن است در طول روز بارها و بارها به یکدیگر متصل و قطع شوند) ، پروتکل های P2P باید در "محیط اتصال ناپایدار و آدرس های IP غیرقابل پیش بینی" کار کنند [شرکی].

P2P در مقابل- مشتری / سرور:

بنابراین ، برخلاف معماری سرور / کلاینت که در آن شما برنامه ها را در دو قطعه نامتقارن توسعه می دهید - سرور که خدماتی را ارائه می دهد و فرض بر این است که در یک آدرس اینترنتی شناخته شده قابل اطمینان است ، و کلاینتی که برای درخواست اطلاعات به سرور متصل می شود - توسعه برنامه های P2P کمی دشوارتر به نظر می رسند.

در یک سیستم P2P ، همه ماشین ها (گره ها) یک برنامه را اجرا می کنند (این تا حدودی یک تعمیم است: برخی از سیستم ها سازمان یافته اند بنابراین گروه های گره P2P برنامه های مشابه اما متفاوتی را اجرا می کنند)

برخی از مواردی که در چنین شرایطی باید رسیدگی شود شامل موارد زیر است:

ناپایداری: گره ها ممکن است همیشه در حال پیوستن و خروج از شبکه باشند (برخلاف سرورها - وب ، ایمیل و غیره ، که ما معمولاً به "بودن در آنجا" وابسته هستیم).

مسیریابی پیام: چگونه باید پیام ها از یک گره به گره دیگر منتقل شوند (جایی که ممکن است دو گره مستقیماً از یکدیگر اطلاع نداشته باشند).

جستجو (تا حدودی مربوط به مسیریابی): نحوه یافتن اطلاعات مورد نظر از گره های متصل به شبکه.

امنیت: تعداد زیادی از مشکلات از جمله گره ها که می توانند به گره های دیگر اعتماد کنند ، از انجام کارهای بد گره های مخرب به شبکه P2P یا گره های جداگانه ، امکان ارسال و دریافت داده ها به صورت ناشناس و غیره جلوگیری می کند.

آموزش در این سند در وهله اول به چهار موضوع اول - اصول راه اندازی و راه اندازی سیستم P2P - متمرکز است.

تا پایان آموزش ، با کتابخانه ای آشنا خواهید شد که به شما در اجرای پروتکل ها و برنامه های P2P کمک می کند.

این کتابخانه برنامه های معمول مربوط به زیرساخت را برای کمک به شما در مدیریت مسائل مربوط به سوکت ، اتصال رشته و ارسال پیام بین همسالان فراهم می کند.

برای کمک به شما در درک اینکه چه اتفاقی می افتد ، قسمت اصلی این آموزش گشت و گذار در توسعه خود کتابخانه است.

یک چارچوب P2P:

بررسی اجمالی:

قبل از اینکه به جزئیات کد واقعی بپردازید ، باید درک کنید که ما سعی داریم چه سطح بالایی را پیاده سازی کنیم.

شکل زیر نحوه مکالمه بین همسالان در یک شبکه را نشان می دهد.

هر برنامه ای که روی یک گره اجرا می شود ، یک رابط به کاربر (شما و من) ارائه می دهد و همزمان یک "حلقه اصلی" را اجرا می کند که اتصال ورودی های دیگر از سایر مخاطبان را گوش می دهد.

در شکل ، یک سناریو در جایی نمودار شده است که کاربر در Peer 1 دکمه ای را کلیک کند ، به عنوان مثال یک دکمه "جستجو" ، در رابط GUI.

واسط به نوعی تصمیم می گیرد که پیام "کوئری" را برای یک همکار دیگر ، در این حالت Peer 2 ارسال کند.

حلقه اصلی Peer 2 درخواست اتصال ورودی را تشخیص می دهد (مرحله 2) و یک موضوع جداگانه برای رسیدگی به داده های واقعی درخواست راه اندازی می کند (مرحله 3).

Thread وظیفه ای است که یک برنامه همزمان یا شبه همزمان با سایر کارهای در حال اجرا اجرا می کند: اگر با این اصطلاح آشنا نیستید به Thread - Wikipedia مراجعه کنید.

هدف از استفاده از نخ ها در اینجا این است که به یک شخص همکار بتوانیم چندین اتصال ورودی را همزمان مدیریت کند.

با فرض اینکه نوع پیام "c" به یک پیام "پرس و جو" اشاره دارد ، Peer 1 پیام واقعی را ارسال می کند (مرحله 4) به محض اتصال به Peer 2.

در مرحله 5 ، کار "thread peer" (موضوع) Peer 2 پیام را دریافت می کند ، یک تأیید نامه را برای Peer 1 ارسال می کند ، اتصال را می بندد و سپس یک تابع / روش مناسب را برای مدیریت پیام براساس نوع آن فراخوانی می کند.

بعد از پردازش پیام ، عملکرد "msg c handler" تصمیم می گیرد که نیاز به ارسال پیام "پاسخ پرسش" به Peer 1 دارد ، بنابراین سعی در اتصال دارد (مرحله 6).

با دریافت پیام ، Peer 1 همان کاری را انجام می دهد که Peer 2 در مرحله 5 انجام داد و روند ادامه دارد ...

اجزای یک همکار:

اجرای پروتکل P2P که هر همکار در نمودار بالا اجرا می کند بر اساس یک چارچوب ساده ساخته شده است که در پایان این سند با جزئیات آشنا خواهید شد.

در اینجا ، من یک نمای کلی از ماژول های مختلف (به عنوان مثال کلاس ها ، در اصطلاحات شی گرا) را که چارچوب را تشکیل می دهند ، ارائه می دهم.

توجه داشته باشید که این چارچوب هیچ ارتباطی با رابط کاربری را شامل نمی شود - آن قسمت از برنامه به طور جداگانه اجرا می شود و با چارچوب اساسی که در اینجا توضیح داده شده تعامل متقابل دارد.

ماژول همتا:

ماژول Peer عملیات کلی یک گره را در شبکه P2P مدیریت می کند.

این شامل یک حلقه اصلی است که اتصالات ورودی را گوش می دهد و رشته های جداگانه ای را برای مدیریت آنها ایجاد می کند.

برنامه نویس ، در حال ساخت یک پروتکل P2P در بالای این چارچوب عمومی ، کنترل کننده ها (به عنوان مثال روش ها یا توابع) را برای انواع پیام ها با ماژول Peer ثبت می کند ، و حلقه اصلی درخواست های ورودی را به کنترل کننده مناسب ارسال می کند.

Peer با تهیه یک درگاه برای گوش دادن به اتصالات ورودی ، و به صورت اختیاری یک آدرس میزبان (به عنوان مثال آدرس IP ، که ممکن است به طور خودکار تعیین شود) و شناسه گره ، شروع اولیه می شود.

لیستی از همتایان شناخته شده ، که ممکن است توسط برنامه نویس قابل دسترسی و اصلاح باشد ، توسط ماژول Peer نگهداری می شود.

اندازه لیست ممکن است محدود باشد و با استفاده از شناسه ها یا موقعیت متوالی آنها در لیست ، به همتا دسترسی پیدا شود.

علاوه بر لیستی از کنترل کننده ها برای انواع مختلف متدها ، گره همچنین یک عملکرد تهیه شده توسط برنامه نویسان را برای تصمیم گیری در مورد نحوه مسیریابی پیام ها ذخیره می کند و می تواند برای اجرای عملیات تثبیت در فواصل زمانی مشخص تنظیم شود.

ماژول PeerConnection:

ماژول PeerConnection سوکت متصل به گره همتا را در خود قرار داده است.

این فریم ورک در حال حاضر از سوکتهای TCP / IP برای ارتباط بین گره ها استفاده می کند.

یک شی PeerConnection روش هایی را فراهم می کند که ارسال و دریافت پیام و تأییدیه ها را در الگوریتم P2P برای برنامه نویس آسان می کند.

این تضمین می کند که پیام ها در قالب صحیح رمزگذاری شده اند و سعی در شناسایی شرایط مختلف خطا دارند.

پیام هایی که بین گره های ساخته شده بر روی این چارچوب رد و بدل می شوند توسط یک هدر متشکل از یک شناسه 4 بایت برای نوع پیام و یک عدد صحیح 4 بایت که اندازه داده ها را در پیام نگه داشته است ، پیشوند می شوند.

کد پیام 4 بایت را می توان به عنوان یک رشته مشاهده کرد ، بنابراین ممکن است برنامه نویس رشته های مناسب طول 4 را برای شناسایی انواع پیام های رد و بدل شده در سیستم ارائه دهد.

وقتی حلقه اصلی همکار پیامی را دریافت می کند ، آن را بر اساس نوع پیام به کنترل کننده مناسب می فرستد.

یک پیام گیرنده پیام به سادگی یک شی function تابعی در پایتون است (یا جسمی که از رابط کاربری آن در جاوا پشتیبانی می کند) که ارجاع به PeerConnection باز و داده پیام را دریافت می کند.

کنترل کننده ها می توانند برای هر نوع پیامی که توسط یک رشته 4 بایت شناسایی شده است ، ثبت شوند.

در حال حاضر فقط یک کنترل کننده در هر نوع ممکن است استفاده شود.

وقتی ماژول Peer درخواست اتصال ورودی را دریافت می کند ، یک شی PeerConnection را تنظیم می کند ، نوع پیام و باقی مانده پیام را می خواند و یک موضوع جداگانه را برای مدیریت داده ها راه اندازی می کند.

وقتی پیام دهنده وظیفه خود را انجام می دهد ، اتصال همتا به طور خودکار بسته می شود.