Laravel Broadcast Redis Socket io บทช่วยสอน

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

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

ดูสิ่งนี้ด้วย: