Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

สายเคเบิล Master Rails Action พร้อมสายเคเบิลแบบ Solid:สร้างแอปแบบเรียลไทม์โดยไม่ต้อง Redis

คุณลักษณะแบบเรียลไทม์กำลังมีความสำคัญมากขึ้นเรื่อยๆ ในเว็บแอปพลิเคชัน แต่ไม่ใช่นักพัฒนา Rails ทุกคนจะคุ้นเคยกับ Action Cable ซึ่งเป็นไลบรารี่ WebSocket ในตัวของเฟรมเวิร์ก

Rails Action Cable รองรับเว็บซ็อกเก็ตมายาวนาน แต่มาพร้อมกับความซับซ้อนเพิ่มเติมบางประการ Rails 8 ขอแนะนำ สายเคเบิลแข็ง ซึ่งเป็นอะแดปเตอร์ที่สำรองฐานข้อมูลใหม่สำหรับ Action Cable ซึ่งไม่จำเป็นต้องใช้ Redis ในคู่มือนี้ ฉันจะแนะนำ Action Cable ให้คุณทราบโดยใช้ Solid Cable และแสดงวิธีสร้างฟีเจอร์แบบเรียลไทม์ คุณจะเห็นว่าการเพิ่มฟังก์ชันการทำงานแบบเรียลไทม์ให้กับแอป Rails 8 นั้นง่ายดายเพียงใดโดยไม่ต้องกังวลกับ Redis

ฉันขอแนะนำให้คุณติดตามและสร้างแอปร่วมกับฉัน แต่คุณสามารถดูโปรเจ็กต์ที่เสร็จสิ้นแล้วบน GitHub ได้

เหตุใดจึงต้องใช้สายเคเบิล Rails Action

เว็บแอปสมัยใหม่มักจำเป็นต้องส่งการอัปเดตไปยังไคลเอนต์แบบเรียลไทม์ ตัวอย่างที่ชัดเจนได้แก่ ข้อความแชทที่ปรากฏขึ้นทันทีหรือการแจ้งเตือนบนแดชบอร์ดสด สายแอคชั่น เป็นโซลูชันในตัวของ Rails สำหรับการรวม WebSockets เข้ากับแอปของคุณ ช่วยให้สามารถสื่อสารสองทางอย่างต่อเนื่องระหว่างเซิร์ฟเวอร์และไคลเอนต์ ฉันรู้สึกขอบคุณเป็นการส่วนตัวสำหรับ Action Cable ซึ่งเป็นส่วนหนึ่งของเฟรมเวิร์ก Rails เนื่องจากรองรับธีมโดยรวมในการมอบทุกสิ่งที่คุณต้องการสำหรับเว็บแอปที่มีประโยชน์อย่างแท้จริง การใช้ Action Cable หมายความว่าเซิร์ฟเวอร์สามารถส่งข้อมูลไปยังเบราว์เซอร์โดยไม่ต้องให้เบราว์เซอร์ร้องขออย่างชัดเจน (ไม่มีการรีเฟรชที่ผู้ใช้แจ้ง!)

ด้วย Action Cable และ WebSockets แอป Rails ของคุณสามารถนำเสนอคุณสมบัติแบบโต้ตอบสดซึ่งในอดีตยากที่จะนำไปใช้ในแอปที่แสดงผลโดยเซิร์ฟเวอร์ กรณีการใช้งานประจำวันบางประการสำหรับสิ่งนี้คือ:

  • แอปพลิเคชันแชทสด
  • การแจ้งเตือนและฟีด
  • แอปการทำงานร่วมกันพร้อมการอัปเดตสด
  • กีฬาสดหรือหุ้น

กล่าวโดยสรุป Action Cable เชื่อมช่องว่างระหว่างวงจรการตอบกลับคำขอแบบดั้งเดิมและการอัปเดตที่ขับเคลื่อนด้วยเหตุการณ์แบบเรียลไทม์ ในฝั่งไคลเอ็นต์ Rails ให้ผู้ใช้ JavaScript เพื่อสมัครรับช่องและรับการออกอากาศ ในฐานะนักพัฒนา คุณจะโต้ตอบกับ Action Cable โดยกำหนดช่องทางแบ็กเอนด์ (คล้ายกับคอนโทรลเลอร์ แต่สำหรับการสตรีมแบบเรียลไทม์) ที่ไคลเอนต์ส่วนหน้าสามารถสมัครรับข้อมูลได้

แล้ว Solid Cable คืออะไร

หากคุณเคยใช้ Action Cable ใน Rails เวอร์ชันก่อนหน้า คุณอาจทราบว่าในการใช้งานจริงมักจะอาศัย Redis (หรือ 05 ของ PostgreSQL ) เพื่อเผยแพร่ข้อความผ่านกระบวนการต่างๆ ของเซิร์ฟเวอร์ บริการผับ/ย่อย (มักจะเป็น Redis) ช่วยให้มั่นใจได้ว่าข้อความจากกระบวนการ Rails หนึ่งจะถูกส่งไปยังกระบวนการอื่นๆ ทั้งหมด เพื่อให้สามารถส่งต่อไปยังไคลเอนต์ WebSocket ที่เชื่อมต่อได้ ในอดีตโครงสร้างพื้นฐานที่เพิ่มเข้ามานี้เป็นข้อกำหนดในการใช้ Action Cable เลย

Solid Cable ซึ่งเปิดตัวใน Rails 8 แทนที่ความต้องการบริการผับ/ย่อยภายนอก เช่น Redis โดยใช้ฐานข้อมูลที่มีอยู่ของคุณเป็นแบ็กเอนด์ Solid Cable เป็นอะแดปเตอร์ที่สำรองฐานข้อมูลสำหรับ Action Cable เหมือนกับ Solid Queue สำหรับงาน Active และ Solid Cache สำหรับ Active Cache ข้อความ WebSocket ขาเข้าแต่ละข้อความจะถูกเขียนลงในตารางฐานข้อมูล และอินสแตนซ์ Action Cable ทั้งหมดจะสำรวจตารางนั้นเพื่อหาข้อความใหม่ที่จะเผยแพร่ไปยังไคลเอนต์ สิ่งนี้เกิดขึ้นเร็วมาก (โดยค่าเริ่มต้นทุกๆ 100 มิลลิวินาที) ทำให้ประสิทธิภาพใกล้เคียงกับเรียลไทม์ ข้อความจะถูกเก็บไว้เพียงช่วงเวลาสั้นๆ (24 ชั่วโมงตามค่าเริ่มต้น) ก่อนที่จะถูกตัดออก ดังนั้นคุณจึงสามารถแก้ไขปัญหาล่าสุดได้โดยไม่ต้องกังวลเรื่องพื้นที่ฐานข้อมูล

โดยรวมแล้ว Solid Cable เข้ากับปรัชญา "Solid Trifecta" ของ Rails 8 ซึ่งเป็นชุดคุณสมบัติในตัวที่สนับสนุนฐานข้อมูลครบชุดสำหรับการแคช งานพื้นหลัง และการส่งข้อความแบบเรียลไทม์ ด้วย Solid Cable คุณจะมีส่วนสุดท้ายในการรันงาน การแคช และ WebSockets ทั้งหมดผ่านทางฐานข้อมูลของคุณ

การสร้างแอป Rails 8 ด้วย Solid Cable

คุณคงอยากรู้อยากลองใช้งาน Solid Cable จริง ดังนั้น มาดูการเพิ่มมันลงในแอปพลิเคชัน Rails 8 และสร้างห้องสนทนาขนาดเล็กที่ผู้ใช้หลายคนสามารถแลกเปลี่ยนข้อความแบบเรียลไทม์กัน

การสร้างแอปตัวอย่าง

คุณจะได้เรียนรู้พื้นฐานของ Action Cable (ช่อง การสมัครสมาชิก การออกอากาศ) ในขณะที่ใช้ Solid Cable เป็นแบ็กเอนด์ เราจะใช้ Rails 8 ในตัวอย่างนี้ ดังนั้นไปข้างหน้าและสร้างแอป Rails ใหม่ด้วย:

rails _8.1.0_ new solid_cable_chat --database=sqlite3

จากนั้น 10 ลงในไดเร็กทอรี solid_cable_chat ใหม่

เนื่องจากคุณใช้ Rails 8 คุณจึงไม่จำเป็นต้องเพิ่ม Solid Cable หรืออัญมณีอื่นใดเพื่อเริ่มเล่น การกำหนดค่าส่วนใหญ่หรือทั้งหมดจะอยู่ที่นั่นเพื่อคุณ ฉันจะอธิบายทั้งหมดให้คุณทราบในกรณีที่คุณมาจาก Rails เวอร์ชันเก่า

การกำหนดค่าสายเคเบิลโซลิด

เราจะเริ่มต้นด้วยการรันการตั้งค่า Solid Cable:

bin/rails solid_cable:install

เครื่องกำเนิดนี้ทำหน้าที่หลักสองประการ มันสร้าง 24 ไฟล์การกำหนดค่าที่ตั้งค่า Solid Cable เป็นอะแดปเตอร์สายเคเบิล นอกจากนี้ยังสร้าง 37 ซึ่งมีคำจำกัดความสคีมาฐานข้อมูลสำหรับตารางข้อความของ Solid Cable Rails เวอร์ชันล่าสุดยังสร้างไฟล์เหล่านี้โดยอัตโนมัติเมื่อรัน 49 .

ต่อไปเราต้องกำหนดการตั้งค่าฐานข้อมูลของเราสำหรับ Solid Cable ตามค่าเริ่มต้น Rails จะใช้ฐานข้อมูลแยกต่างหากสำหรับ Solid Cable เพื่อแยกข้อมูลการส่งข้อความแบบเรียลไทม์จากข้อมูลที่เหลือของคุณ ในการพัฒนา คุณสามารถใช้ฐานข้อมูลเดียวกันหรือตั้งค่าฐานข้อมูลแยกต่างหากก็ได้ ฉันจะแนะนำวิธีใช้ฐานข้อมูล SQLite แยกต่างหากสำหรับ Solid Cable ในการพัฒนา ซึ่งหมายถึงการเพิ่มการเชื่อมต่อฐานข้อมูล "เคเบิล" ใหม่

การตั้งค่าฐานข้อมูลของคุณสำหรับ Solid Cable

เปิด 56 ไฟล์. ในส่วนการพัฒนา ให้เพิ่ม 69 ฐานข้อมูล ตัวอย่างเช่น หากคุณใช้ SQLite (ค่าเริ่มต้นของ Rails สำหรับ dev):

development:
 primary:
 <<: *default
 database: storage/development.sqlite3
 cable:
 <<: *default
 database: storage/development_cable.sqlite3
 migrations_paths: db/cable_migrate

production:
 primary:
 <<: *default
 database: storage/production.sqlite3
 cache:
 <<: *default
 database: storage/production_cache.sqlite3
 migrations_paths: db/cache_migrate
 queue:
 <<: *default
 database: storage/production_queue.sqlite3
 migrations_paths: db/queue_migrate
 cable:
 <<: *default
 database: storage/production_cable.sqlite3
 migrations_paths: db/cable_migrate

ขอย้ำอีกครั้ง หากคุณใช้ Rails เวอร์ชันล่าสุดเพียงพอ การกำหนดค่านี้จะอยู่ที่นั่นแล้ว

ตอนนี้เปิด 76 . Solid Cable ควรเป็นอะแดปเตอร์เริ่มต้นในการผลิตอยู่แล้ว เราต้องการเปิดใช้งาน Solid Cable ในการพัฒนาเช่นกัน (เพื่อให้เราสามารถทดสอบการแชทของเราใน localhost) แก้ไข 87 เพื่อใช้ 92 อะแดปเตอร์อยู่ระหว่างการพัฒนาและชี้ไปที่ 100 ฐานข้อมูลที่เราเพิ่งกำหนดค่า:

development:
 adapter: solid_cable
 connects_to:
 database:
 writing: cable
 polling_interval: 0.1.seconds
 message_retention: 1.day

test:
 adapter: test

production:
 adapter: solid_cable
 connects_to:
 database:
 writing: cable
 polling_interval: 0.1.seconds
 message_retention: 1.day

ใน 119 ข้างต้น เราตั้งค่าอะแดปเตอร์การพัฒนาเป็น 128 และคัดลอกการตั้งค่าจากการตั้งค่าการผลิต 132 การตั้งค่าจะบอก Action Cable ให้ใช้ สายเคเบิล ฐานข้อมูล (ตามที่กำหนดไว้ใน 141 ) สำหรับจัดเก็บข้อความ คุณจะต้องทำการเปลี่ยนแปลงนี้แม้ใน Rails เวอร์ชันล่าสุดก็ตาม

สำหรับแอปขนาดเล็ก คุณอาจใช้ฐานข้อมูลหลักเดียวกันเพื่อเก็บตารางของ Solid Cable (โดยการคัดลอกสคีมาไปยังการย้ายและลบการกำหนดค่า DB แยกต่างหาก) แต่แนะนำให้ใช้ฐานข้อมูลแยกต่างหากเพื่อหลีกเลี่ยงการรบกวนประสิทธิภาพที่อาจเกิดขึ้นกับข้อมูลแอปหลักของคุณ

สุดท้ายให้รัน 156 เพื่อให้แน่ใจว่าฐานข้อมูลมีความพร้อม คุณจะต้องดำเนินการนี้ในเวอร์ชันที่ใช้งานจริงหากคุณจัดส่งแอป

การตั้งค่าช่อง Action Cable

Action Cable ทำงานผ่านช่องทางต่างๆ ซึ่งเป็นคลาส Ruby ที่จัดการสตรีมข้อมูล สิ่งนี้ค่อนข้างคล้ายกับคอนโทรลเลอร์ที่จัดการคำขอ HTTP มาสร้างช่องสำหรับฟีเจอร์แชทของเรากันเถอะ เราจะเรียกมันว่า 160 . ใช้ตัวสร้าง:

rails generate channel UserChat

เปิด 174 ที่สร้างขึ้น และอัปเดตให้มีตรรกะใหม่

เมื่อลูกค้าสมัครสมาชิก 186 (โดยเปิดหน้าแชท) 195 โทรกลับถูกเรียกใช้ เราต้องการโทรไปที่ 207 ในการเรียกกลับนี้เพื่อเริ่มการสตรีมจากการออกอากาศชื่อ 218 .

โดยพื้นฐานแล้ว เรากำลังพูดว่า "ฟังข้อมูลใดๆ ที่ออกอากาศไปยัง 221 สตรีมและส่งต่อไปยังลูกค้าของช่องนี้" ผู้ใช้ทุกคนที่สมัครรับข้อมูลจากช่องนี้จะได้รับการเผยแพร่ข้อความไปที่ 235 .

เรายังต้องการกำหนดการกระทำแบบกำหนดเอง โดยเราจะเรียกมันว่า 245 . วิธีการสาธารณะใดๆ ในช่องสามารถเรียกใช้ได้จากฝั่งไคลเอ็นต์ ในกรณีนี้ เมื่อไคลเอ็นต์เรียก 257 269 วิธีการดำเนินการบนเซิร์ฟเวอร์

การใช้งาน 278 ของเรา รับเนื้อหาข้อความที่ลูกค้าส่งและใช้ 283 เพื่อส่งออกให้ทุกคนที่สมัครรับ 296 . ซึ่งหมายความว่าสมาชิกทุกคน (รวมถึงผู้ส่ง) จะได้รับข้อมูลข้อความแบบเรียลไทม์ เราเพียงแค่เผยแพร่แฮชที่มีข้อความ คุณสามารถใส่ข้อมูลอื่นๆ (เช่น ชื่อผู้ใช้หรือการประทับเวลา) ได้ตามต้องการ หมายเหตุ: ในแอปจริง คุณอาจเก็บข้อความไว้ในฐานข้อมูลหรือดำเนินการตรวจสอบความถูกต้องที่นี่ เพื่อความง่าย เราแค่ถ่ายทอดมัน

class UserChatChannel < ApplicationCable::Channel
 def subscribed
 stream_from "user_chat_channel"
 end

 def unsubscribed
 # Any cleanup needed when unsubscribing from the channel
 end

 def talk(data)
 message = data["content"]
 ActionCable.server.broadcast("user_chat_channel", { content: message })
 end
end

การสร้างผู้บริโภคของช่องทางของเราในลูกค้า

ขณะนี้เราได้สร้างแบ็กเอนด์แล้ว เราจำเป็นต้องเชื่อมต่อส่วนหน้าเพื่อให้ผู้ใช้สามารถส่งและรับข้อความผ่าน WebSocket เพื่อสาธิตการทำงานแบบเรียลไทม์

Rails 8 มาพร้อมกับ JavaScript ของ Action Cable ที่อบเข้ามา ตัวสร้างได้สร้าง 300 ไฟล์สำหรับเรา เราจะนำพฤติกรรมของลูกค้าไปใช้ที่นั่นต่อไป

เปิด 314 และอัปเดตเป็น:

import consumer from "channels/consumer";

const userChatChannel = consumer.subscriptions.create("UserChatChannel", {
 connected() {
 console.log("Connected to UserChatChannel.");
 },

 disconnected() {
 console.log("Disconnected from UserChatChannel.");
 },

 received(data) {
 const messagesDiv = document.getElementById("messages");
 if (messagesDiv && data.content) {
 const messageElement = document.createElement("p");
 messageElement.textContent = data.content;
 messagesDiv.appendChild(messageElement);
 }
 }
});

function sendMessage(content) {
 userChatChannel.perform("talk", { content: content });
}

export { sendMessage };
window.sendMessage = sendMessage;

ที่นี่เราใช้ 327 เพื่อสร้างการสมัครสมาชิก 336 ของเรา บนเซิร์ฟเวอร์ สิ่งนี้จะส่งคืนออบเจ็กต์การสมัครสมาชิกที่เราสามารถใช้เพื่อโต้ตอบกับช่องได้

344 การโทรกลับจะทำงานเมื่อมีการสร้างการเชื่อมต่อ ที่นี่เราเพียงเข้าสู่คอนโซลเพื่อดูว่ามันใช้งานได้

350 โทรกลับจะทำงานหาก WebSocket ตัดการเชื่อมต่อ

362 การโทรกลับเป็นสิ่งสำคัญ! การโทรกลับนี้จะเกิดขึ้นเมื่อช่องของเราได้รับการออกอากาศจากเซิร์ฟเวอร์ ใน 372 เราออกอากาศ 382 . 393 อาร์กิวเมนต์ที่นี่จะเป็นแฮชเดียวกัน การดำเนินการนี้จะอัปเดตบันทึกการแชทของเราทันทีสำหรับลูกค้าที่เชื่อมต่อทั้งหมดเมื่อมีข้อความใหม่เข้ามา

นอกจากนี้เรายังกำหนดตัวช่วย 400 ที่เรียก 419 . ซึ่งจะส่งคำขอไปยังฝั่งเซิร์ฟเวอร์ 420 การกระทำที่เรากำหนดไว้ รวมถึงเนื้อหาข้อความที่ผู้ใช้พิมพ์

ตอนนี้เราต้องการ UI ที่เรียบง่ายสำหรับผู้ใช้ในการส่งและรับข้อความ มาสร้างมุมมองพื้นฐานสำหรับสิ่งนี้กันดีกว่า

การสร้าง UI อย่างง่ายสำหรับแอปตัวอย่างของเรา

ขั้นแรก สร้างคอนโทรลเลอร์:

rails generate controller UserChat index

จากนั้น เปิดมุมมองดัชนีและตั้งค่าพื้นฐาน:

<h1>Chats from Users</h1>

<div id="messages" style="border: 1px solid #ccc; padding: 1em; height: 200px; overflow-y: auto; margin-bottom: 1em;">
 <!-- Messages will appear here -->
</div>

<form id="chat-form" onsubmit="event.preventDefault(); sendMessage(document.getElementById('chat-input').value); document.getElementById('chat-input').value = '';">
 <input type="text" id="chat-input" placeholder="Type a message..." autocomplete="off" style="width: 80%;" />
 <button type="submit">Send</button>
</form>

สุดท้าย ตั้งค่าเส้นทางรากให้ชี้ไปยังเส้นทางใหม่นี้ใน 436 :

root "user_chat#index"

แสดงให้เห็นว่าทุกอย่างทำงานร่วมกันอย่างไร

แอพแชทที่เรียบง่ายของเราพร้อมสำหรับการทดสอบแล้ว! รันโปรเจ็กต์ด้วย 448 และไปที่ 458 :

สายเคเบิล Master Rails Action พร้อมสายเคเบิลแบบ Solid:สร้างแอปแบบเรียลไทม์โดยไม่ต้อง Redis

หากต้องการอวดการอัปเดตแบบเรียลไทม์ ให้เปิดแอปในแท็บเบราว์เซอร์สองแท็บ ในแท็บเดียว ให้ป้อนข้อความ เช่น "สวัสดีจากแท็บหมายเลข 1!"

สายเคเบิล Master Rails Action พร้อมสายเคเบิลแบบ Solid:สร้างแอปแบบเรียลไทม์โดยไม่ต้อง Redis หากคุณส่งข้อความจากแท็บที่สอง คุณจะเห็นข้อความนั้นปรากฏในแท็บแรก!

สายเคเบิล Master Rails Action พร้อมสายเคเบิลแบบ Solid:สร้างแอปแบบเรียลไทม์โดยไม่ต้อง Redis

การนำ Rails Action Cable ไปใช้งานจริง

Solid Cable เก็บข้อความ WebSocket ไว้ในตารางฐานข้อมูล และตัวอย่างด้านบนของเราใช้ค่าเริ่มต้น 461 ฐานข้อมูล Rails 8 ยังมีค่าเริ่มต้นให้ใช้ SQLite สำหรับ Solid Cable ในแอพใหม่ แต่ในทางเทคนิคแล้วคุณสามารถชี้ไปที่ฐานข้อมูลที่รองรับ Rails ได้โดยการเพิ่ม 472 ส่วนใน 483 .

ที่จริงแล้ว แนะนำให้ใช้ฐานข้อมูลแยกต่างหากสำหรับ Solid Cable ในการใช้งานจริง เพื่อแยกโหลดการส่งข้อความแบบเรียลไทม์ออกจากข้อมูลที่เหลือของคุณ ตัวอย่างเช่น คุณอาจจัดเตรียม 491 โดยเฉพาะ ฐานข้อมูลสำหรับ Solid Cable ในขณะที่ข้อมูลแอปหลักของคุณยังคงอยู่ใน 506 .

การแยกนี้ป้องกันการรับส่งข้อมูลการแชทหรือการแจ้งเตือนจากการโต้แย้งกับคำถามแอปพลิเคชันหลักของคุณ ดังที่กล่าวไว้ สำหรับแอปขนาดเล็ก โดยปกติแล้วจะใช้ฐานข้อมูลเดียวสำหรับทั้งข้อมูลแอปและข้อความเคเบิล

ส่วนที่ไม่ชัดเจนคือเพื่อให้แน่ใจว่าฐานข้อมูล Solid Cable รวมอยู่ในการตั้งค่าการใช้งานของคุณ หากคุณใช้ฐานข้อมูลแยกต่างหาก อย่าลืมเรียกใช้ 519 หรือ 527 เพื่อให้ Rails สร้าง 534 ตารางในการผลิต

โปรดทราบว่าการเชื่อมต่อ WebSocket แต่ละครั้งใช้หน่วยความจำเซิร์ฟเวอร์ ดังนั้นโปรดตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของคุณมีทรัพยากรเพียงพอที่จะรองรับจำนวนการเชื่อมต่อที่คุณต้องการ

การกำหนดค่าช่วงเวลาการโพล

ความถี่ในการโพลสำหรับ Solid Cable สามารถกำหนดค่าได้ ช่วยให้คุณปรับสมดุลเวลาแฝงกับโหลดฐานข้อมูลได้ การลดช่วงเวลาส่งผลให้มีการโพลบ่อยขึ้น ซึ่งจะช่วยลดเวลาในการรับข้อความใหม่ แต่ต้องเสียค่าใช้จ่ายในการสืบค้น SELECT ในฐานข้อมูลของคุณมากขึ้น

ในทางกลับกัน ช่วงเวลาที่นานขึ้นจะทำให้การใช้ฐานข้อมูลเบาลง แต่ทำให้เกิดความล่าช้าในการออกอากาศและการอัปเดตมากขึ้น ในทางปฏิบัติ ค่าเริ่มต้น 0.1 วินาที (10 โพลต่อวินาที) เป็นจุดเริ่มต้นที่ดีที่ให้การอัปเดตที่ดูเหมือนเป็นเรียลไทม์โดยไม่ทำให้ฐานข้อมูลส่วนใหญ่ล้นหลาม

Solid Cable คือเสาหลักสำคัญของ Solid Trifecta

คุณได้เห็นแล้วว่า Rails Action Cable นำ WebSockets มาสู่ Rails เพื่อการสื่อสารแบบเรียลไทม์ได้อย่างไร และวิธีที่ Solid Cable ทำให้เป็นไปได้โดยไม่ต้องใช้ Redis คุณรู้หรือไม่ว่ามี ไลบรารี "Solid" อีกสองไลบรารีใน Rails ? Solid Cache ทำให้การแคชเป็นเรื่องง่ายโดยไม่ต้องใช้ Redis และ Solid Queue ช่วยให้คุณประมวลผลงานเบื้องหลังโดยไม่ต้องใช้ Redis

การใช้ "Solid Trifecta" มอบเฟรมเวิร์กการทำงานที่น่าทึ่งสำหรับการสร้างแอปพลิเคชันเชิงโต้ตอบโดยมีค่าใช้จ่ายด้านโครงสร้างพื้นฐานน้อยที่สุด

ข้อได้เปรียบที่สำคัญของ Solid Cable และพี่น้องคือความเรียบง่าย ฟังก์ชันการทำงานแบบเรียลไทม์ของแอป Rails ของเราทำงานนอกกรอบโดยมีเพียงฐานข้อมูลของแอปอยู่เบื้องหลัง การปรับใช้ทำได้ง่ายกว่า (ไม่มี Redis หรือบริการเพิ่มเติม) และสำหรับหลายแอปพลิเคชัน ประสิทธิภาพก็เกินพอ

แน่นอนว่าเมื่อใช้งานแอปพลิเคชัน Rails ใดๆ ในการผลิต คุณควรตรวจสอบหาปัญหาที่ผู้ใช้ของคุณอาจพบ คุณไม่ต้องการทราบหรือไม่ว่าเมื่อมีสิ่งผิดปกติเกิดขึ้นกับผู้บริโภคและช่องทาง Action Cable ของคุณ ก่อนที่ผู้ใช้ของคุณจะดำเนินการ ?

Honeybadger เป็นตัวเลือกที่ยอดเยี่ยมสำหรับข้อผิดพลาดของ Rails และการตรวจสอบประสิทธิภาพ ซึ่งมีความสำคัญอย่างยิ่งต่อการปรับใช้แอปพลิเคชันแบบเรียลไทม์ Honeybadger แจ้งเตือนคุณทันทีเมื่อมีข้อผิดพลาดเกิดขึ้นที่ใดก็ตามในแอปพลิเคชันของคุณ—ในแบ็กเอนด์และฝั่งไคลเอ็นต์—และดึงบันทึกแอปพลิเคชันและข้อมูลประสิทธิภาพของคุณเพื่อการค้นหา การแก้ไขปัญหา และการแก้ไขอย่างรวดเร็ว

ลงทะเบียนเพื่อรับ Honeybadger เพื่อเริ่มต้น!