What have you found for these years?

2009-05-21

ruby stomp (2)

要不要看看 mogilefs-client 怎麼寫的?
雖然我不怎麼喜歡 Socket.mogilefs_new,
但基本上這邊寫得很清楚,處理了 timeout,
也處理了 mark as dead 諸如此類...
我相信 memcache-client 也都有做類似的處理,
只是我比較喜歡 mogilefs-client 有分檔案,
而不是 memcache-client 只有兩個檔案。

現在我在 stomp 上碰到一狗票問題,
全部都是因為他做 blocking i/o.......
而且還是 block 在 constructor!!!!

正在苦惱到底該怎麼做比較好,比照 mogilefs-client 重做一次?
那其實就等於全部我自己寫,stomp 可以丟掉了...
可能作者的 queue server 超穩超快,絕對不會出事吧 @@
所以就算 block 住也沒關係...

##
# Returns a socket connected to a MogileFS tracker.

def socket
return @socket if @socket and not @socket.closed?

now = Time.now

@hosts.sort_by { rand(3) - 1 }.each do |host|
next if @dead.include? host and @dead[host] > now - 5

begin
@socket = Socket.mogilefs_new(*(host.split(/:/) << @timeout))
rescue SystemCallError, MogileFS::Timeout
@dead[host] = now
next
end

return @socket
end

raise MogileFS::UnreachableBackendError
end

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0