Giới thiệu về Rails Action Cable

Hôm nay tôi sẽ giới thiệu với các bạn đôi chút về Rails Action Cable – một công nghệ mới trong Rails giúp cho việc thực hiện realtime communication trở nên đơn giản hơn bao giờ hết.

Action Cable là gì?

Action Cable cho phép tạo các kết nối web-socket giữa server và client, từ đó client có thể nhận được thông tin từ server mà không cần phải reload lại trang. Điều này giúp cho ứng dụng trở nên thân thiện hơn với người dùng và đảm bảo cho dữ liệu được cập nhật liên tục và đồng bộ.

Để sử dụng Action Cable, đầu tiên tôi cần tạo một channel. Channel là nơi để server gửi dữ liệu cho client. Dưới đây là ví dụ về việc tạo một channel đơn giản:

class NotificationChannel < ApplicationCable::Channel
  def subscribed
    stream_from "notification_channel"
  end
end

Ở đây, tôi đã tạo một channel có tên là “notification_channel”. Hàm subscribed được gọi khi client kết nối đến channel này. Trong ví dụ này, tôi sử dụng hàm stream_from để theo dõi các thông tin từ channel “notification_channel”.

Tiếp theo, tôi cần phải gửi dữ liệu từ server đến client thông qua channel đã tạo. Ví dụ:

class NotificationChannel < ApplicationCable::Channel
  def subscribed
    stream_from "notification_channel"
  end

  def send_notification(data)
    ActionCable.server.broadcast "notification_channel", message: data['message']
  end
end

Ở đây, tôi đã tạo một hàm send_notification để gửi thông báo từ server đến client. Hàm ActionCable.server.broadcast được sử dụng để gửi thông báo đến tất cả các client đã kết nối đến channel “notification_channel”.

Để nhận thông tin từ server, tôi cần phải sử dụng JavaScript trên client-side để kết nối đến channel đã tạo. Ví dụ:

App.notification = App.cable.subscriptions.create("NotificationChannel", {
  received: function(data) {
    alert(data['message']);
  }
});

Ở đây, tôi đã tạo một subscription tới channel “notification_channel” bằng cách sử dụng hàm App.cable.subscriptions.create. Hàm received được gọi khi có thông tin được gửi đến từ server.

Với Action Cable, việc thực hiện realtime communication giữa server và client trở nên đơn giản hơn bao giờ hết. Tuy nhiên, để sử dụng được Action Cable, tôi cần phải cài đặt một số dependencies và kết nối các phần của ứng dụng với nhau.

Đầu tiên, tôi cần phải cài đặt gem actioncable và thêm các files cấu hình cho Action Cable vào ứng dụng Rails. Để làm điều này, tôi có thể thực hiện các bước sau:

1. Thêm gem actioncable vào file Gemfile:

gem 'actioncable'

2. Chạy lệnh bundle để cài đặt gem:

bundle install

3. Tạo một file có tên là cable.js trong thư mục app/assets/javascripts và thêm các đoạn code sau vào file để tạo ra một consumer để kết nối tới Action Cable server.

//= require action_cable
//= require_self
//= require_tree ./channels

(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();

}).call(this);

4. Tạo một file có tên là application_cable_channel.rb trong thư mục app/channels và thêm đoạn code sau vào file. File này sẽ định nghĩa một base class cho tất cả các channel khác trong ứng dụng.

module ApplicationCable
  class Channel < ActionCable::Channel::Base
  end
end

5. Tạo một file có tên là application_cable/connection.rb trong thư mục app/channels và thêm đoạn code sau vào file. File này sẽ định nghĩa một base class cho tất cả các connection khác trong ứng dụng.

module ApplicationCable
  class Connection < ActionCable::Connection::Base
  end
end

Sau khi đã cài đặt và cấu hình xong Action Cable, tôi có thể sử dụng các channels để thực hiện realtime communication giữa server và client.

Câu kết

Trong bài viết này, chúng ta đã tìm hiểu về Rails Action Cable và cách sử dụng nó để thực hiện realtime communication giữa server và client. Hy vọng bài viết này sẽ giúp các bạn hiểu thêm về công nghệ này và có thể áp dụng vào các ứng dụng Rails của mình.

Happy Hacking 🙂