2013-03-19 118 views
0

我現在正在寫一個單播聊天服務器模型,流程將如下:高效蟒蛇聊天服務器

  • 發送者發出消息,到聊天服務器,郵件服務器還可以指定郵件收件人ID
  • 聊天服務器將消息路由到正確的客戶,根據收件人ID

我使用python標準庫asyncore實現聊天服務器模型。我發現一旦客戶端連接到服務器,CPU就會上升(1%vs 24%)。我相信性能受到handle_write函數循環的限制。

是否有更好的(例如更高效的)框架來完成我的聊天服務器要求?

在此先感謝

+0

不是一個真正的問題,但看看[eventlet](http://eventlet.net/) – sean 2013-03-19 23:07:58

回答

2

當然我們需要實際的代碼來調試問題。但你主要問的是:

是否有更好的(例如更高效的)框架來完成我的聊天實現?

是的。人們普遍認爲asyncore很糟糕。這很難使用,也不夠低效。這在Windows上尤其糟糕,因爲select特別吸引Windows。

所以,是的,使用不同的框架可能會讓事情變得更好。

不幸的是,一個SO問題是不是一個好地方得到了框架建議,但我可以拋出通常的嫌疑人名單:twistedmonoclegeventeventlet,​​。另外,如果您不擔心可擴展到超過幾十個客戶端,那麼只需小規模的性能,每個客戶端使用一個線程(甚至兩個線程,一個用於讀取,另一個用於寫入),以及阻塞I/O非常簡單。最後,如果您要與Python 3.x保持同步,3.4很有可能會有一個新的和改進的異步I/O模塊,它比asyncore(和它幾乎肯定會基於tulip)。所以......最好的解決方案可能是獲得一臺時間機器並繼續前進幾個月。 (或者,如果您是將來尋找此答案的讀者,請查看IPC下的標準庫,並猜測哪個模塊是新改進的異步I/O模塊。)

1

我剛剛閱讀一個網絡,談論不同python web服務器之間的效率(Link)。

我想我會使用gevent,因爲它非常高效(似乎)。