12/08/2018, 13:15

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 ...

  • 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
0