1
我在寫一個基本的網絡日誌腳本,客戶端可以連接到我的服務器套接字,並且從套接字讀取的所有數據都將寫入文件。紅寶石 - 在網絡套接字上接收多行
我有它,所以我可以連接telnet和第一行(按下輸入前)被寫入文件,但後續行不寫。爲了使這項工作正常進行,我需要改變什麼?
我也希望能夠有多個監聽套接字寫入同一個文件 - 有沒有辦法做到這一點沒有多線程?
log_path ||= "./network-logs"
listen_port ||= 2509
minute_buffer = {now: Time.now, buffer: "" }
current_time = Time.now
current_date = Date.today.to_s
client = nil
Dir.mkdir(log_path) unless File.exists?(log_path)
f = File.new("#{log_path}/#{current_date}.txt", 'w')
def short_time
"%02d" % Time.now.hour.to_s + ':' +
"%02d" % Time.now.min.to_s + ':' +
"%02d" % Time.now.sec.to_s
end
server = TCPServer.open(listen_port)
loop {
client = server.accept
f.puts "#{Time.now} Client Connected"
puts "#{Time.now} Client Connected"
current_time = Time.now
if minute_buffer[:now].min != Time.now.min
f.puts "##### Minute summary for #{minute_buffer[:now].to_s}: #{minute_buffer[:min]} :"
puts "##### Minute summary for #{minute_buffer[:now].to_s}: #{minute_buffer[:min]} :"
f.puts "##### #{minute_buffer[:buffer]}"
minute_buffer[:now] = Time.now
minute_buffer[:buffer] = ""
end
data = client.gets
f.puts short_time + " : " + data.to_s
puts short_time + " : " + data.to_s
minute_buffer[:buffer] = minute_buffer[:buffer] + data.to_s
if current_date != Date.today.to_s
f.close
current_date = Date.today.to_s
f = File.new("#{log_path}/#{current_date}.txt", 'w')
end
}
這f.puts線也將有外循環移動,否則它會被列出數千次對於大量的數據,因爲循環中不再有等待函數。 這也導致了這個腳本運行時的問題,它只適用於單個連接。儘管如此,這樣做,並且在外部循環中使用異常處理來處理客戶端斷開連接,並且因此不在'client.gets'處讀取數據不會導致問題。將試驗並更新我的問題。 – bdx
對。我的答案只是修復了錯誤。 – unnu
確實如此。 – bdx