UDPeer (คุณ-ดี-เพียร์) เป็นเฟรมเวิร์กการสื่อสารเพียร์ 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 โปรดทราบว่าสิ่งเหล่านี้เป็นการขึ้นต่อกันสำหรับแพ็คเกจ webrtc ของ Node.js ไม่ใช่ 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