2012-01-25 30 views
2

我上實現用C Linux上的特殊目的TCP服務器計劃。在做了一點研究後,看起來有幾種方法可以做到這一點,包括單線程,每個連接一個線程和其他方法。對於套接字,有數據報vs流等選項,阻塞與非阻塞。良好的架構適度簡單的TCP服務器

大部分的通信是要看起來像:

Client: request id [request info] 
Server: status id [response info] 

Client: request id [request info] 
Server: status id [response info] 
Client: additional request id [request info] 
Server: status id [response info] 

這裏的一切是< 1kB的大部分東西都是< 512B。但是,在短時間內可能會有很多個人請求。

那麼,我該如何設置服務器,所以其工作效率最高(即不生豬資源,不否認的客戶端請求)?

+1

生成響應需要很長時間嗎? – cnicutar

+2

TCP意味着您正在使用流。數據報是UDP。 – duskwuff

+0

你有沒有關於帶寬,連接數量的想法?如果服務器沒有被加載,爲什麼不考慮使用現有的協議(可能是HTTP,XMLRPC或SNMP等)?我會建議使用文本消息(Json,....),因爲它們更易於調試。 (查看SCGI的簡單協議示例)。 –

回答

3

我認爲你的問題歸結到性能。可以?

如果是這樣,三個問題:

  • 什麼是你的服務器將處理客戶的平均/最大數量?
  • 連接是持久的還是客戶端連接每個X請求?
  • 客戶端發送新請求時涉及多少處理?

不管怎樣,我會從簡單的開始。使其非阻塞,並單線程。簡介和壓力測試它。然後,如果您對所呈現的表現不滿意,請找出根本原因並嘗試修復它。作爲最終選項,將其擴展到每個處理器內核的一個工作線程。

如果你不關心交貨的可靠性和順序,你可能需要使用UDP。

+0

好吧,聽起來像一個很好的起點。 – Dan