一、基本原理
有時候我們需要實現(xiàn)一個公共的模塊,需要對多個其他的模塊提供服務,最常用的方式就是實現(xiàn)一個Socket Server,接受客戶的請求,并返回給客戶結(jié)果。
這經(jīng)常涉及到如果管理多個連接及如何多線程的提供服務的問題,常用的方式就是連接池和線程池,基本流程如下:
首先服務器端有一個監(jiān)聽線程,不斷監(jiān)聽來自客戶端的連接。
當一個客戶端連接到監(jiān)聽線程后,便建立了一個新的連接。
監(jiān)聽線程將新建立的連接放入連接池進行管理,然后繼續(xù)監(jiān)聽新來的連接。
線程池中有多個服務線程,每個線程都監(jiān)聽一個任務隊列,一個建立的連接對應一個服務任務,當服務線程發(fā)現(xiàn)有新的任務的時候,便用此連接向客戶端提供服務。
一個Socket Server所能夠提供的連接數(shù)可配置,如果超過配置的個數(shù)則拒絕新的連接。
當服務線程完成服務的時候,客戶端關(guān)閉連接,服務線程關(guān)閉連接,空閑并等待處理新的任務。
連接池的監(jiān)控線程清除其中關(guān)閉的連接對象,從而可以建立新的連接。