UDPeer (you-dee-peer) هو إطار عمل بسيط لاتصالات نظير UDP 2، مبني على العمل الشاق الذي قام به مطورو webrtc والعديد من المساهمين الرائعين الآخرين في Nodejs.
الفكرة الأساسية هي كما يلي:
إذا تمكن جهازان من التحدث عبر WebRTC عبر NAT وجدران الحماية، فيجب أن يكونا قادرين أيضًا على تبادل حزم UDP. هذا هو ما يدور حوله هذا المشروع. UDPeer هو وكيل UDP بسيط يعمل على كلا الجانبين لتوفير قناة UDP ثنائية الاتجاه.
لن يعمل هذا الوكيل إلا إذا تمكن العميل والخادم من التواصل عبر webRTC باستخدام الإنترنت العام. يعمل عادةً دون أي مشكلة طالما أن لديك اتصالات إنترنت صادرة، ولكن فقط للتحقق يمكنك أيضًا اختبار ذلك على مواقع مختلفة مثل https://simplewebrtc.com/demo.html
حقا بسيطة.
npm install -g udpeer
ستحتاج إلى تشغيل مثيلات منفصلة لوكيل udpeer على جانب العميل والخادم. سيقومون بإنشاء قناة اتصال مع بعضهم البعض باستخدام WebRTC الذي يخترق جدران الحماية. يتطلب webrtc إرسال الإشارات بين العقد، ويتم ذلك باستخدام Signalhub (https://github.com/mafintosh/signalhub) وهو خادم بسيط يعتمد على websocket. من الناحية المثالية، يجب عليك إعداد خادم الإشارات الخاص بك وتحديد عنوان URL هناك.
بمجرد إنشاء الوكلاء لقناة اتصال، سيكشفون عن منفذ UDP المحلي على المضيف المحلي. ستتحدث برامج العميل والقطع مع هذه المنافذ المحلية بدلاً من التحدث مع بعضها البعض.
+--------+ +--------+ | | | | +----------+ | | WEBRTC | | +----------+ | Client +----+ Node 1 +----------------------------+ Node 2 +------+ Server | +----------+ | | ^ | +----------+ | | | | | | | | +----+---+ +----+---+ | +-----------+ | | | || | +------------+ SIGNALHUB|-------------+ WebSocket| || Websocket +-----------+
الاتفاق على اسم قناة مشترك فريد بين الطرفين. إنها ببساطة سلسلة كبيرة. إذا لم تكن متأكدًا، قم بتشغيل UDPeer بدون اسم قناة وسيقوم بإنشاء اسم لك. قم بتمرير هذا إلى الطرف الآخر. قم بتخصيص منفذ UDP وكيل واحد على كل جهاز. دعنا نسميها منفذ وكيل العميل (CProxy) ومنفذ وكيل الخادم (SProxy).
هذا كل شيء. قم بتثبيت UDPeer على كلا الجهازين.
npm install -g udpeer
على جانب العميل
udpeer -i -c channelId -p CProxy:C
على جانب الخادم
udpeer -c Ourchannel -p SProxy:S
الاستخدام
Usage:
udpeer [-i] [--channel=channelID] --ports=proxy:client
-i --init = should be true only for initiator of the connection (only one of the two parties)
-m --my = A unique node name for your machine, if you want to override
-c --channel = The channel where two nodes will communicate. Must be unique
If you don't specify, it will be generated, which needs to be shared with your peer.
-s --signal = Your own private signaling URLs, seperated by comma. e.g. https://url.com,https://url2.com
-p --ports = The local ports in the form proxy:local
-l --localhost = Localhost IP (127.0.0.1 by default)
-v --version = Version
-h --help = print this message
Example. Machine 1
udpeer -cFQBLA7?H8N5ZHP65 -p 5000:5001
At Machine 2 (As initiator)
udpeer -i -cFQBLA7?H8N5ZHP65 -p 6000:6001
إذا كان كل شيء يعمل بشكل جيد، فبعد فترة سيتم اتصال الخادم ووكيل العميل عبر webrtc وسترى رسالة على وحدة التحكم.
##تعديل تكوين العميل
بمجرد إعداد الوكيل، يمكنك بعد ذلك تغيير عناوين IP لخادمك في إعدادات العميل للتحدث إلى منافذ وكيل المضيف المحلي بدلاً من العناوين البعيدة.
على سبيل المثال، إذا كان تكوين الخادم الخاص بك في العميل هو 12.131.121.14:3456 فسيصبح 0.0.0.0:7890 (إذا اخترت 7890 كـ CProxy في المثال السابق)
*ماذا لو كان عميلي لا يستخدم منفذ مصدر ثابت للاتصال؟ لا تقلق، لقد قمنا بتغطية هذا الأمر. بمجرد اتصال العميل بالوكيل، سيقوم الوكيل بحفظ منفذ مصدر العميل والرد عليه في المرة القادمة.
ملاحظة: الرمز الحالي لا يقوم بتشفير الاتصال. الرجاء استخدام على مسؤوليتك الخاصة. يرجى اتباع أي إرشادات قدمها موظفو تكنولوجيا المعلومات لديك فيما يتعلق بأمان المنفذ الأساسي.
##تعطل بسبب WebRTC
لتجنب بعض الأعطال في حزمة webrtc في Ubuntu، فيما يلي المتطلبات الأساسية لحزم Ubuntu/debian. يرجى ملاحظة أن هذه تبعيات لحزمة Node.js webrtc، وليست UDPeer مباشرة. يرجى تجربته sudo apt-get install python2.7 git-all pkg-config libncurses5-dev libssl-dev libnss3-dev libexpat-dev
هذه الحزمة ممكنة بفضل العمل الجاد الذي بذله
https://github.com/mafintosh/signalhub https://github.com/js-platform/node-webrtc