Cáp hành động trong Rails

Tram Ho


Chào mọi người, hôm nay chúng ta sẽ tìm hiểu về Action Cable trong Rails. 🚗

Introduction

Action Cable tích hợp Websockets với Rails app. Nó cho phép Rails xây dựng các tính năng realtime.

Với full-stack offering: cung cấp cả client-side JavaScript framework, và Ruby server-side framework.

Terminology

Một Action Cable server có thể xử lý nhiều kết nối tới. Mỗi kết nối Websocket sẽ có một connection instance tương ứng.

Một user có thể có nhiều kết nối Websocket tới app nếu user đó mở nhiều tab trên các trình duyệt hoặc thiết bị.

Client có kết nối websocket được gọi là consumer. Mỗi consumer có thể subscribe tới nhiều cable channel(kênh truyền). channel là nơi chứa các logic, như là controller trong mô hình MVC.

Khi consumer đăng kí channel, trở thành subscriber, connection giữa subscriberchannel được gọi là subscription.


Server-Side Components

1. Connections

Connection thiết lập mỗi quan hệ giữa client và server, với mỗi Websocket kết nối tới server, một connection object được khởi tạo. Object này trở thành cha của tất cả channel subscriptions được tao sau này.

Connection là một instance của ApplicationCable::Connection. Trong class này, ta sẽ phân quyền, tiến hành kết nối nếu user được xác định.

1.1 Connection setup

identified_by định danh connection để dễ dàng cho việc tìm kiếm connection sau này.

cookie tự động được gửi tới connection instance khi có connection mới, và ta dùng nó để đặt giá trị cho current_user. Bằng việc định danh mỗi connection bằng current_user, ta có thể lấy lại các connection của user đó.

2. Channels

channel là nơi chứa các logic, như là controller trong mô hình MVC. channel được tạo bởi class ApplicationCable::Channel.

2.1 Parent channel setup

Sau đó ta có thể tạo ra các channel của mình:

2.2 Subscriptions

Khi consumer subscribe một channel, trở thành subscribers, kết nối giữa hai bên được gọi là subscription

Client-Size Components

1. Connections

Phía client cũng cần connection object để thiết lập kết nối. Nó được tạo mặc định trong Rails:

1.1 Connect consumer

Mặc định consumer sẽ connect tới /cable tới server. connection sẽ không được thành lập cho đến khi ta tạo một subscription.

1.2 Subscribers

Một consumer trở thành subscriber bằng việc tạo một subscription tới một channel:

Client-Server Interations

1. Streams

Streams cung cấp cơ chế cho những channel định tuyến những nội dung muốn gửi (broadcast) tới các subscribers

Nếu ta có một stream có liên kết với model thì broadcasting có thể được tạo từ modelchannel:

Sau đó ta có thể broadcast tới kênh truyền này:

2. Broadcasting

broadcasting là một liên kết pub/sub(published, subscriber), nơi mà mọi thứ được truyền bởi publisher được định tuyến tới thẳng các subscribers đang streaming với tên của broadcasting này. Mỗi channel có thể streaming một hoặc nhiều broadcasting.

broadcast có thể được gọi ở nơi khác trong Rails:

3. Subscriptions

Khi consumer đăng kí channel, trở thành subscriber, connection giữa subscriberchannel được gọi là subscription.

Những messages được định tuyến tới channel subscriptions này dựa vào định danh do cable consumer gửi.

4. Passing parameter to channels

Ta có thể truyền params từ phía client tới server khi tạo mới subsciptions:

Tham số đầu tiên truyền vào subscriptions.create trở thành params hash trong cable channel:

Examples

Receiving New Web Notification

Tạo notifications channel:

Phía client:

Broadcast:


Chia sẻ bài viết ngay

Nguồn bài viết : Viblo