同步方式最简单。
参考:
require 'socket' hostname = 192.168.0.8 port = 8800 client = TCPSocket.open hostname, port # 向服务器发送请求 client.send message, 0 puts "==开始接受服务器数据..." # 打印服务器返回的结果 while line = client.gets puts line.chop end puts "==服务器数据接收完毕..." ## 关闭client client.close
异步方式需要用到第三方库。
考察了一下 https://github.com/socketry/async 这个是个基本 的。 要使用下面这个。
https://github.com/socketry/async-io
require 'async/io'
def echo_server(endpoint)
Async do |task|
# This is a synchronous block within the current task:
endpoint.accept do |client|
# This is an asynchronous block within the current reactor:
data = client.read(512)
# This produces out-of-order responses.
task.sleep(rand * 0.01)
client.write(data.reverse)
end
end
end
def echo_client(endpoint, data)
Async do |task|
endpoint.connect do |peer|
result = peer.write(data)
message = peer.read(512)
puts "Sent #{data}, got response: #{message}"
end
end
end
Async do
endpoint = Async::IO::Endpoint.tcp('0.0.0.0', 9000)
# 创建一个server
server = echo_server(endpoint)
5.times.collect do |i|
echo_client(endpoint, "Hello World #{i}")
end.each(&:wait)
# 关闭这个server
server.stop
end