Skip to content

Instantly share code, notes, and snippets.

@sugamasao
Created September 10, 2022 07:36
Show Gist options
  • Save sugamasao/f19168b1ead700eabd04d126a13dfe4e to your computer and use it in GitHub Desktop.
Save sugamasao/f19168b1ead700eabd04d126a13dfe4e to your computer and use it in GitHub Desktop.
dRubyで遊んでみよう
require 'drb/drb'
require 'logger'
require_relative './user'
URL = 'druby://localhost:8787'
server = DRbObject.new_with_uri(URL)
logger = Logger.new(STDOUT)
3.times do
logger.info "call server"
user = server.fetch
logger.info "user = #{user}, name = #{user.name}, created_at = #{user.created_at}"
sleep 3
end
require 'drb/drb'
require_relative './user'
require 'logger'
URL = 'druby://localhost:8787'
class Server
def initialize(logger)
@logger = logger
end
def fetch
logger.info "call fetch"
name = %w(芹沢鴨 近藤勇 新見錦 斎藤一 土方歳三 大野右仲 相馬主計).sample
::User.new(name: name, created_at: Time.now)
end
def logger
@logger
end
end
logger = Logger.new(STDOUT)
DRb.start_service(URL, Server.new(logger), :start_level => 1)
logger.info "start server"
DRb.thread.join
logger.info "end server"
class User
attr_reader :name, :created_at
def initialize(name:, created_at:)
@name = name
@created_at = created_at
end
end
@sugamasao
Copy link
Author

ターミナルでserverを実行しつつ

% ruby server.rb

別のターミナルでclientを動かす
そうすると、serverで生成されたオブジェクトがclientで扱えて便利〜〜

% ruby client.rb
I, [2022-09-10T16:39:12.605202 #76033]  INFO -- : call server
I, [2022-09-10T16:39:12.610869 #76033]  INFO -- : user = #<User:0x00000001031b2408>, name = 新見錦, created_at = 2022-09-10 16:39:12 +0900
I, [2022-09-10T16:39:15.611280 #76033]  INFO -- : call server
I, [2022-09-10T16:39:15.613116 #76033]  INFO -- : user = #<User:0x00000001031b1300>, name = 近藤勇, created_at = 2022-09-10 16:39:15 +0900
I, [2022-09-10T16:39:18.614358 #76033]  INFO -- : call server
I, [2022-09-10T16:39:18.619264 #76033]  INFO -- : user = #<User:0x00000001031b0540>, name = 芹沢鴨, created_at = 2022-09-10 16:39:18 +0900

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment