我有我的服務器,它看起來像這樣上運行的守護進程的Ruby腳本:如何判斷我的Ruby服務器腳本是否被重載?
@server = TCPServer.open(61101)
loop do
@thr = Thread.new(@server.accept) do |sock|
Thread.current[:myArrayOfHashes] = [] # hashes containing attributes of myObject
SystemTimer.timeout_after(5) do
Thread.current[:string] = sock.gets
sock.close
# parse the string and load the data into myArrayOfHashes
Myobject.transaction do # Update the myObjects Table
Thread.current[:myArrayOfHashes].each do |h|
Thread.current[:newMyObject] = Myobject.new
# load up the new object with data
Thread.current[:newMyObject].save
end
end
end
end
@thr.join
end
該服務器接收併爲我的Rails應用程序是在Mac OS 10.6所有正在運行的管理數據。客戶端調用服務器上的15,每15分鐘,而我現在只有16級左右的客戶端,呼籲15每15分鐘,我想了解一下以下內容:
- 如果兩個客戶端在足夠接近調用同時,一個客戶端的連接嘗試失敗?
- 我怎麼知道我的服務器可以同時容納多少個客戶端連接?
- 如何監控我的服務器使用多少內存?
另外,有沒有一篇文章可以指向我討論實現這種服務器的最佳方式?我的意思是我可以有多個服務器實例在同一個端口上監聽嗎?這甚至會有幫助嗎?
我正在使用Bluepill來監視我的服務器守護進程。
好奇:爲什麼要使用'Thread.new'如果你只是'join'它之後?這相當於'sock = @ server.accept',然後刪除所有對線程的引用。 – Ashe
我想這個問題的真正答案是我可能不知道我在做什麼。我所知道的是,@ thr.join使所有事情都能夠可靠地開始工作。我會用足夠的中間代碼更新我的文章,以便能夠了解我在理解上存在的差距。 – pitachip
如果你使用'Thread.new'而不是'join',那麼是的,如果你的代碼不是線程安全的,那可能會很奇怪。儘管如此,您更安全,但只是刪除所有'Thread'引用。像這樣:[http://pastebin.com/8m6CnbU4](http://pastebin.com/8m6CnbU4)。 – Ashe