12/08/2018, 13:58

Socket trong rails

Hôm nay mình xin được hướng dẫn mọi người xây dựng 1 hệ thống client và server thông qua socket trên chính server rails của mình. Hệ thống này sẽ chạy song song với server rails của app. Xin phép bỏ qua lý thuyết về socket trong bài này, mn có thể search qua google phần lý thuyết về nó một ...

Hôm nay mình xin được hướng dẫn mọi người xây dựng 1 hệ thống client và server thông qua socket trên chính server rails của mình. Hệ thống này sẽ chạy song song với server rails của app.

Xin phép bỏ qua lý thuyết về socket trong bài này, mn có thể search qua google phần lý thuyết về nó một cách dễ dàng.

Đầu tiên chúng ta sẽ thiết lập hệ thống server trên app rails.

#config/application.rb

#Trong class Apllication < Rails::Apllication
config.after_initialize do
end

Đây là lệnh để thiết lập các chương trình ta muốn chạy song song với webserver khi server chạy.

Ở đây mình sẽ chèn đoạn code server socket.

server = TCPServer.new 1234
Thread.new do
  while true
    Thread.start(server.accept) do |client|
      while client && !client.closed?
        s = client.gets
        client.puts s
      end
      client.close
    end
  end
end

Đoạn code trên mình thực hiện thao tác server nhận nghe từ client 1 chuỗi sau đó trả về client 1 chuỗi.

Đầu tiên mình mở 1 cổng 1234 để nghe, sau đó tạo 1 thread để server socket hoạt động độc lập so với server rails

Tiếp theo tạo 1 thread khác để hoạt động với các client( điều này sẽ giúp server socket của ta tại 1 thời điểm có thể thao tác được với nhiều client ).

Nếu bên client tự ngắt kết nối, hoặc có lỗi về mạng thì socket sẽ được tự đóng.

Dưới đây là đoạn mã code client mn có thể test

class Client
  require "socket"

  hostname = "localhost"
  port = 1234

  s = TCPSocket.open(hostname, port)
  s.puts "hello world"
  while line = s.gets
    puts line
  end
  s.close
end

Client.new

#Kết quả khi chạy ruby tenfile.rb
hello world

0