注册会员 登录
Project1 返回首页

zh99998的个人空间 https://rpg.blue/?42757 [收藏] [复制] [分享] [RSS]

日志

使用标准IO进行进程通讯

已有 501 次阅读2010-10-25 17:21 |个人分类:Ruby|

进程间通讯的方式有很多,一个简单的方法是标准IO
Ruby中的popen可以实现获取子进程的标准IO

以下是一个示例,客户端调用服务端并不断接收服务端传来的消息,然后输出到控制台
服务端每隔1s返回一下当前时间
使用Marshal来序列化,用EOF(是255吗?如果不是的话自行换掉。。)来表示终止

#server.rb
def output(object)
Marshal.dump(object)+255.chr
end
$stdin.sync = true
$stdout.sync = true #设置标准IO为同步模式,不使用缓存
loop{print output(Time.now);sleep 1}

#client.rb
def get(str)
Marshal.load str.chomp(255.chr)
end
cmd = 'ruby server.rb'
IO.popen cmd, 'r+' do |pipe|
pipe.binmode #设置管道为二进制模式
pipe.sync = true #设置管道为同步模式
loop do
puts get pipe.gets(255.chr)
end
end

如果要使用Stderr(标准错误输出),可以使用popen4库(open3是啥来着..)

鸡蛋

鲜花

评论 (0 个评论)

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2021-12-4 12:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部