Laravel Broadcast Redis Socket io บทช่วยสอน
0 นี่มันเกี่ยวกับอะไร
นี่คือคำแนะนำการกำหนดค่าทีละขั้นตอนที่มีจุดมุ่งหมายเพื่อช่วยให้เข้าใจว่าการออกอากาศด้วย Redis และ Socket.IO ทำงาน เราจะครอบคลุมกลไกภายในของแต่ละส่วนประกอบ และตามทฤษฎีแล้ว จะใช้การกำหนดค่า
1 ภาพรวมสถาปัตยกรรม
ล็อคแอพเงินสด
เมื่อคุณส่งเหตุการณ์ (|_+_|) ที่ใช้ |_+_| ส่วนต่อประสาน Laravel กำลังจะสร้างและส่ง |_+_| ที่จะมอบหมายให้ออกอากาศเหตุการณ์และจะดำเนินการโดยพนักงานคิว หมายความว่ากระบวนการ PHP อื่นจะออกอากาศกิจกรรมของคุณ เป็นวิธีการโหลดแอปพลิเคชันและตอบกลับเร็วขึ้น
กิจกรรมของคุณยังสามารถใช้ |_+_| ซึ่งจะข้ามคิว เช่นเดียวกันจะเกิดขึ้นหากใน |_+_| . ของคุณ คุณมี |_+_|; |_+_| ในที่นี้หมายความว่าไม่จำเป็นต้องเรียกใช้กระบวนการภายนอกเพื่อดำเนินการกับงาน
เนื่องจากเราใช้ Redis เป็นโปรแกรมควบคุมการออกอากาศของเรา (|_+_| ใน |_+_|) Queue Worker จะใช้ |_+_| ชั้นเรียนเพื่อถ่ายทอดเหตุการณ์ เราสามารถมองเข้าไปในชั้นเรียนเพื่อดูว่าจะใช้ Redis |_+_| คำสั่ง (มันห่อในสิ่งที่เรียกว่าสคริปต์ Lua แต่นี่ไม่สำคัญที่นี่)
คำสั่งเผยแพร่เป็นส่วนหนึ่งของ |_+_| คุณสมบัติของ Redis มันเผยแพร่ข้อความ (ในกรณีของเราคือเหตุการณ์ที่เป็นสตริงที่เรากำลังออกอากาศ) บนช่อง (ที่เรากำหนดในวิธี |_+_| ในคลาสเหตุการณ์ของเรา) และใครก็ตามที่สมัครรับข้อมูลจากช่องนั้นจะได้รับ มันจะเป็นเ Socket.IO เซิร์ฟเวอร์ที่จะเป็นสมาชิก
ในฐานะที่เป็น Socket.IO เซิร์ฟเวอร์ที่เราจะใช้ |_+_| เป็นเซิร์ฟเวอร์ Node.js ที่สามารถเชื่อมต่อกับ Redis และสามารถสร้างการเชื่อมต่อ WebSocket กับไคลเอ็นต์ได้ จะใช้เหตุการณ์ออกอากาศจาก Redis และส่งไปยังไคลเอนต์ที่เชื่อมต่อ นอกจากนี้ยังสามารถรับเหตุการณ์ได้โดยตรงจากไคลเอนต์ที่เชื่อมต่อและออกอากาศไปยังไคลเอนต์ที่เชื่อมต่ออื่น ๆ
สุดท้าย บนไคลเอนต์ เราจะติดตั้ง |_+_| และ |_+_|. สองอันแรกคืออันสำคัญที่จะเชื่อมต่อกับเรา Socket.IO เซิร์ฟเวอร์ อันที่สองเป็นห้องสมุดผู้ช่วยที่ทำให้ง่ายต่อการฟังเหตุการณ์ พอจะพูดได้ว่าเป็นแพ็คเกจ Laravel อย่างเป็นทางการที่ทำงานกับ WebSockets
2 การดำเนินการ
0 Laravel
เราจะเริ่มด้วยการติดตั้ง Laravel ใหม่ทั้งหมด |_+_| ATM เวอร์ชันล่าสุดคือ |_+_| และเรากำลังจะใช้งาน ไปข้างหน้าและสร้างกิจกรรม |_+_| และทำให้สามารถแพร่ภาพได้โดยเพิ่ม |_+_| อินเทอร์เฟซ (จะถูกนำเข้าในคลาสแล้ว) เราจะตั้งค่าช่องให้เป็นสาธารณะมากกว่าส่วนตัวในตอนนี้
event(new Event())
เราสามารถลองออกอากาศได้แล้ว มาสร้างเส้นทางผู้ช่วยที่จะส่งกิจกรรมและเข้าสู่เส้นทางนั้นกันเถอะ
[ShouldBroadcast](https://github.com/laravel/framework/blob/v6.12.0/src/Illuminate/Contracts/Broadcasting/ShouldBroadcast.php)
ไม่มีอะไรเกิดขึ้น หรืออย่างน้อยก็ดูเหมือน มาดู |_+_| ของเรากัน เรามีโดยค่าเริ่มต้น |_+_| และ |_+_| อันที่จริงแล้ว กิจกรรมของเราได้รับการถ่ายทอดโดย Laravel (|_+_|) แล้ว และได้แพร่ภาพไปยังล็อกไฟล์ของเรา (|_+_|) นี่คือ:
Job
ตอนนี้สิ่งนี้ไม่มีประโยชน์มาก ไปข้างหน้าและเพิ่ม Redis เราสามารถข้ามการกำหนดค่าคิวได้ในตอนนี้ และปล่อยให้ Laravel ถ่ายทอดกิจกรรมไปยัง Redis โดยตรง
1 Redis
คุณจะติดตั้ง Redis ต่างกันไปขึ้นอยู่กับระบบปฏิบัติการของคุณ ในกรณีของ Ubuntu ให้รัน |_+_| ในเทอร์มินัลของคุณ คุณอาจต้องติดตั้งเพิ่มเติมเช่นกัน เครื่องมือ เพื่อให้ Laravel เชื่อมต่อกับ Redis |_+_|ของเรา |_+_| ได้ตั้งค่าเริ่มต้นของ Redis แล้ว ดังนั้นเราสามารถตั้งค่า |_+_| ได้ เมื่อเราเริ่มกิจกรรมตอนนี้ มันจะออกอากาศไปยังเซิร์ฟเวอร์ Redis เราสามารถใช้คำสั่งการดีบัก Redis |_+_| เพื่อดูเหตุการณ์ ในการเข้าถึง Redis ให้ดำเนินการ |_+_| ในเทอร์มินัล (อีกครั้ง Ubuntu หากคุณใช้ระบบปฏิบัติการอื่น คุณจะต้องตรวจสอบวิธีเข้าถึง Redis CLI ด้วยตัวเอง) วิ่งกันเถอะ |_+_| ก่อนและยิงเหตุการณ์ในภายหลัง เราควรจะเห็นสิ่งนี้:
ดูไร้สาระเล็กน้อยเนื่องจากสคริปต์ Lua แต่ในบรรทัดสุดท้ายเราจะเห็น |_+_| . ดังนั้น Redis จึงเผยแพร่กิจกรรมสตริงของเราเป็นข้อความในช่อง |_+_| . มาตั้งค่าสมาชิกข้อความนี้กัน
2 Socket.io — เซิร์ฟเวอร์
ฝากติดตามด้วยนะครับ เอกสาร และติดตั้ง |_+_| ทั่วโลก |_+_|. หากคุณไม่ต้องการติดตั้งทั่วโลก การติดตั้งในโปรเจ็กต์ของเราก็ไม่เป็นไร (แต่โปรดทราบว่า |_+_| ไฟล์สั่งการจะไม่สามารถใช้ได้ทั่วโลก) ต่อไปเราจะเริ่มต้นใน dir ของโครงการของเรา ใช้โหมด dev เพื่อการดีบักที่ง่ายขึ้น ตัวเลือกที่เหลือสามารถคงค่าเริ่มต้นไว้ได้ในตอนนี้
เพียงเท่านี้ เราก็รันได้แล้วด้วย|_+_| ตอนนี้เรามาเริ่มกิจกรรมกัน และเราควรเห็นว่ามันไปถึงเซิร์ฟเวอร์ของเรา
มีไม่มากที่จะเพิ่มที่นี่ หากคุณสงสัยว่า laravel-echo-server รู้ได้อย่างไรว่าควรสมัครรับข้อมูลจากช่องใดเพื่อรับกิจกรรมของเรา (ดังที่ฉันได้กล่าวไปแล้ว ข้อความ Redis Pub/Sub จะถูกเผยแพร่บนช่อง และมีเพียงสมาชิกของช่องเท่านั้นที่จะรับได้) มันก็แค่ใช้ |_+_| คำสั่งที่อนุญาตให้สมัครรับข้อมูลทุกช่องที่ตรงกับรูปแบบที่กำหนดและตามรูปแบบนั้นจะใช้ |_+_| เพื่อสมัครสมาชิกทุกช่อง
3 Socket.IO - ลูกค้า
สำหรับลูกค้าเราต้องการสองแพ็คเกจ มาเรียกใช้ภายในโครงการของเรา dir |_+_| เราไม่ได้วิ่ง |_+_| ยังไงก็ตาม ไปทำกันต่อเถอะ ในระหว่างนี้ เรามากำหนดค่าแพ็คเกจเหล่านี้ใน |_+_| . กัน :
[ShouldBroadcastNow](https://github.com/laravel/framework/blob/v6.12.0/src/Illuminate/Contracts/Broadcasting/ShouldBroadcastNow.php)
เมื่อเสร็จแล้วเราสามารถรวบรวม |_+_| และเตรียมมุมมอง ปรับตัวได้ |_+_| (โดยค่าเริ่มต้นมี |_+_| ตั้งค่าเส้นทางที่ส่งคืนมุมมองนั้นอยู่แล้ว) ฉันทำความสะอาดจากสิ่งที่เราไม่ต้องการ และเพิ่มแท็กสคริปต์:
.env
อย่างที่คุณเห็น เราได้ตั้งค่า |_+_| เพื่อฟัง |_+_| ทางช่อง |_+_| . ดูเหมือนว่างานของเราน่าจะไปถึงลูกค้าได้แล้วในตอนนี้ มาเปิดกันเถอะ |_+_| (|_+_|) ในแท็บเดียว แล้วกด |_+_| ในแท็บอื่น:
หน้าเข้าสู่ระบบใน php พร้อมซอร์สโค้ดฐานข้อมูล
คุณสามารถเพิ่มข้อมูลการออกอากาศโดยเพิ่มคุณสมบัติสาธารณะในคลาสเหตุการณ์ของคุณ:
QUEUE_CONNECTION=sync
4 การตรวจสอบสิทธิ์ — ช่องส่วนตัว
เราใช้แค่ |_+_| นอกคลาส |_+_| วิธีจำ? หากเราต้องการใช้ |_+_| เราจะต้องกำหนดค่าเพิ่มเติมอีกเล็กน้อย ลูกค้าที่ต้องการรับกิจกรรมจากช่องส่วนตัวจะต้องได้รับการตรวจสอบสิทธิ์
ที่ด้านบนสุดของเอกสารกระจายเสียง หน้าหนังสือ คุณจะเห็นว่าเราควรยกเลิกความคิดเห็น |_+_|ใน |_+_| มาทำกันตอนนี้เลย |_+_| จะลงทะเบียนเส้นทางตรวจสอบการออกอากาศ |_+_| ที่นั่น เราจำเป็นต้องกำหนดเส้นทางสำหรับช่องส่วนตัวทุกช่อง และใช้ตรรกะการตรวจสอบสิทธิ์ อาร์กิวเมนต์แรกเป็นผู้ใช้ที่รับรองความถูกต้อง อาร์กิวเมนต์ที่สองคือกระสุน (ถ้ามี)
sync
เราต้องการโทเค็น CSRF ด้วย เพิ่มลงใน |_+_| ขณะที่เราอยู่ที่นี่ เรามาเปลี่ยนโค้ด JS: use |_+_| แทนที่จะเป็น |_+_| เหมือนกันในชั้นเรียนของกิจกรรม
BROADCAST_DRIVER=redis
หากแอป Laravel ของคุณไม่ทำงานบน |_+_| , คุณจะต้องเปลี่ยน |_+_| ใน |_+_| ตามนั้น (ไฟล์การกำหนดค่านี้ควรอยู่ที่รูทของ dir ของโปรเจ็กต์ของเรา)
ตอนนี้ถ้าคุณเปิด |_+_| ในเบราว์เซอร์ของคุณ คุณควรเห็นใน |_+_| คอนโซล |_+_|
เข้าระบบกันเถอะ |_+_| :
.env
ตอนนี้ คุณจะได้รับการตรวจสอบสิทธิ์และจะสามารถรับกิจกรรมการออกอากาศในช่องนี้ได้
5 คิว
เราข้ามสิ่งนี้ไปในตอนเริ่มต้น และไม่เป็นไรหากคุณต้องการข้ามไปทั้งหมด ในกรณีที่คุณไม่ ฉันจะครอบคลุมที่นี่
เนื่องจากเราใช้ Redis อยู่แล้ว เรามาใช้กับ Queue กัน ตั้ง |_+_| ใน |_+_| . หากคุณเริ่มกิจกรรมตอนนี้ |_+_| คุณจะไม่เห็นมันทุกที่ วิ่ง |_+_| และคุณควรเห็นสิ่งต่อไปนี้:
ขณะนี้ เหตุการณ์ได้รับการประมวลผลแล้ว และควรทำให้ทุกวิถีทางไปยังไคลเอ็นต์ที่เชื่อมต่อทั้งหมด
ฉันหวังว่าคุณจะสนุกกับคำแนะนำนี้ และมีความเข้าใจอย่างถ่องแท้เกี่ยวกับการแพร่ภาพ Laravel กับ Redis และ Socket.IO ตอนนี้. ปิดท้ายด้วยคำพูดสร้างแรงบันดาลใจด้วยคำสั่งที่มีประโยชน์ซึ่งผู้สร้าง Laravel ที่รอบคอบรวมอยู่ในเฟรมเวิร์ก:
#php #laravel # socket io
ดูสิ่งนี้ด้วย:
- เรียนรู้สาเหตุต่างๆ ของข้อผิดพลาดเราเตอร์ TP-Link 404
- Soakmont คืออะไร (SOAK) | โทเค็น Soakmont คืออะไร | โทเค็น SOAK คืออะไร
- SOAR.FI (SOAR) ซื้อได้ที่ไหนและอย่างไร – คำแนะนำทีละขั้นตอนง่าย ๆ
- Plasm Network (PLM) คืออะไร | โทเค็นเครือข่าย Plasm คืออะไร | เหรียญ PLM คืออะไร
- วิธีสร้างส่วนท้ายโดยใช้ Material UI