0

Xây dựng ứng dụng chat đơn giản trong rails với gem websocket-rails

  • Bài viết này sẽ chia sẽ cách xây dựng ứng dụng web-chat đơn giản trong ruby on rails.
  • Tôi sẽ sử dụng gem websocket-rails trên rails server , định nghĩa 2 method "client_connected" , "client_disconnected" và 1 method "new_message" để nhận message từ một máy client.
  • Đầu tiên bạn cài gem websocket-rails:
  • Thêm gem websocket-rails vào trong Gemfile và bundle
  • chạy lệnh khởi tạo: rails g websocket_rails:install, lệnh này sẽ tạo ra 2 file: config/events.rb, config/initializers/websocket_rails.rb
  • Xoá Rack::Lock middleware bằng cách thêm lệnh sau vào file environments/development.rb : config.middleware.delete Rack::Lock
  • start server bằng lệnh: rails s
  • Tạo file controller :app/controllers/chat_controller.rb
class ChatController < WebsocketRails::BaseController
  def new_message
    puts ')'*40
  end

  def client_connected
    puts '-'*40
  end

  def client_disconnected
    puts '&'*40
  end
end
  • config file :config/events.rb
WebsocketRails::EventMap.describe do
  subscribe :client_connected, :to => ChatController, :with_method => :client_connected

  subscribe :message, :to => ChatController, :with_method => :new_message

  subscribe :client_disconnected, :to => ChatController, :with_method => :client_disconnected
end```
- config websocket-rails trong file: config/initializers/websocket_rails.rb
```ruby

WebsocketRails.setup do |config|
  config.log_path = "#{Rails.root}/log/websocket_rails.log"
  config.log_internal_events = true
  config.synchronize = false
end```
- Phía client-side: websocket-client-simple

```Ruby
require 'rubygems'
require 'websocket-client-simple'

ws = WebSocket::Client::Simple.connect 'ws://localhost:3000/websocket'

ws.on :message do |msg|
  puts msg.data
end

ws.on :new_message do
  hash = { channel: 'example' }
  ws.send hash
end

ws.on :close do |e|
  p e
  exit 1
end

ws.on :error do |e|
  p e
end

hash = { channel: 'Example', message: 'Example' }
ws.send 'new_message', hash

loop do
  ws.send STDIN.gets.strip
end

faye-websocket

require 'faye/websocket'
require 'eventmachine'

EM.run {
  ws = Faye::WebSocket::Client.new('ws://localhost:3000/websocket')

  ws.on :open do |event|
    p [:open]
  end

  ws.on :message do |event|
    p [:message, event.data]
  end

  ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end

  ws.send( 'Example Text' )
}
  • Cảm ơn các bạn đã đọc, phần tới tôi sẽ giới thiệu về ứng dụng socket trong multiplayer game

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí