2013-01-03 19 views
0

我想創建一個並行發送和接收數據的應用程序,如聊天應用程序。它獲得輸入並且還發送一些輸出,但不僅在它接收到數據時。我想使用UDP作爲協議。我使用紅寶石1.9.3。Ruby:我如何並行地接收和發送數據?

這裏是接收數據的代碼:

@s = UDPSocket.new 
@s.bind(localhost, 1234) 

Socket.udp_server_loop_on([@s]) do |message, sender| 
    #do something 
end 

此代碼應運行獨立於應用程序的其餘部分,它不應該阻止它。

我應該使用線程嗎?我從來沒有嘗試過一個網絡程序,我不是一個專業的開發人員,所以請耐心等待。也許我的代碼/設計只是廢話,所以隨時告訴我這是如何做到專業人士! ;)

回答

2

由於您通過套接字接收單個的原子消息,並且可以以相同的方式回覆,所以UDP非常適合自然地進行這種非阻塞處理。

在該循環中,請確保快速處理事件併發送響應消息。如果您長時間阻止呼叫,它會阻止您的循環並影響響應時間。

EventMachine提供了一種用於編寫異步應用程序的結構,並具有用於處理UDP和TCP套接字的自己的方法。

不要忘記看看已經實施的解決方案。對於聊天應用程序,Socket.IO是一個很好的開始。

+0

謝謝!我會看看那個;) –

1

你應該看看Eventmachine寶石,它非常有效地處理阻塞IO。其中還包括TCP和UDP服務器/客戶端API。