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