Socket trong rails
Bài đăng này đã không được cập nhật trong 8 năm
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
All rights reserved