spserver
?為了搭一個spserver服務器,花了半天的時間,終于搞好了.....其實也怪我自己,因為粗心大意沒看清楚編譯spserver源代碼工程的先后順序,一直搞不定,果斷google百度了半下午+一晚上,不過收獲還是很大的。
現在把我這半天中碰到的有關spserver的問題及學到的東西整理下:
1.先介紹下spserver:
spserver 是一個實現了半同步/半異步(Half-Sync/Half-Async)和領導者/追隨者(Leader/Follower) 模式的服務器框架,能夠簡化 TCP server 的開發工作。
spserver 使用 c++ 實現,目前實現了以下功能:
- 封裝了 TCP server 中接受連接的功能
- 使用非阻塞型I/O和事件驅動模型,由主線程負責處理所有 TCP 連接上的數據讀取和發送,因此連接數不受線程數的限制
- 主線程讀取到的數據放入隊列,由一個線程池處理實際的業務
- 一個 http 服務器框架,即嵌入式 web 服務器(請參考: SPWebServer:一個基于 SPServer 的 web 服務器框架)
-------------------------------------------------------------網上抄的額.....關于它的基本用法就先不抄了,我還沒搞的很懂,以后再補上吧
?
spserver的版本是在google的版本管理上面的,網址:http://code.google.com/p/spserver/
下面是它的一個版本更新圖
可以看到,最新的是0.9.5版。需要注意的是,spserver最開始是在linux上用的,一直到0.9.0版才移植到windows上,但是0.9.0需要依賴libevent和pthread,0.9.1就脫離了libevent和pthread。
?
2.遇到的問題
我是想在windows平臺下搭建一個小型的游戲計分服務器,其實搭建過程很簡單:
(1)下載spserver-0.9.5,解壓縮,是下面這個樣子的
將解壓縮后的這個文件夾的路徑放到VS2010的VC++Direction中的include中。
(2)建立一個基于C/C++的控制臺工程
包含頭文件
#include <spserver/spiocpserver.hpp> #include <spserver/sphandler.hpp> #include <spserver/sprequest.hpp> #include <spserver/spresponse.hpp> #include <spserver/spmsgdecoder.hpp> #include <spserver/spbuffer.hpp>(需要其他的話再添加)
(3)在工程的配置中的link中加入spserver.lib(也許還需要ws2_32.lib和mswsock.lib)
我就是在這個時候出問題了,編譯過不去,很明顯,我還沒有spserver.lib
顯然,需要到下載的spserver的源代碼中找,在spserver-0.9.5\win32中,有個spserver.dsw,打開編譯它(貌似有13個工程)。這里需要說一下,因為網上有一篇文章大概叫《將spserver工程移到windows平臺上》?說的是在windows平臺上搭建spserver環境,說用VC6編譯,注意,它的版本是0.9.0,前面說過,0.9.0版是剛剛移到windows平臺上的,需要libevent和pthread,而在這之后的版都不需要了(它說的這種方法我也嘗試了,沒弄成。)
而現在所說的編譯spserver-0.9.5\win32中的spserver.dsw,用哪個編譯器都可以,我用的VS2010,但是一定要將其中的spserver工程設為start項,及先編譯spserver工程。編完后得到了spserver.lib,將它放到剛才簡歷的c/c++控制臺工程的目錄中,編譯這個工程,ok了。
?
3.其他
在下載的源碼中,win32文件夾里有一套測試代碼(或者叫測試工具)
testiocpchat:
至于怎樣寫iocp通信服務器,可以參考testiocpchat工程,添加一些handler就可以了。
?
壓力測試:
testiocpecho.cpp 和 testiocpstress.cpp
E:\spserver-0.9.2\win32\testiocpecho\Debug>.\testiocpecho.exe
#1728 server type lf
#1728 Listen on port [3333]
#1728 Thread #2868 has been created to accept socket
#1728 [tp@unknown] create thread#4028
#1728 [tp@unknown] create thread#2492
#1728 [tp@unknown] create thread#1076
#1728 [tp@unknown] create thread#3204
2) 在另一個 console 啟動 testiocpstress.exe
E:\spserver-0.9.2\win32\testiocpstress\Debug>.\testiocpstress.exe -c 100 -m 100
這個程序支持一些命令行參數,-c 用戶指定模擬多少個 client ,-m 用于指定每個 client 發送多少條信息。
在一臺有 512M 內存的 windows xp home edition 機器上,兩個程序都在本機運行,可以穩定運行 5000 的并發連接。
如果上到 10K 的連接,在測試一段時間之后,會開始出現 10055 的錯誤。
限于目前沒有更高配置的機器,沒有辦法做更大并發的測試。如果有人有興趣,可以幫忙做一下測試。
?
暫時就這么多吧總結
- 上一篇: Android AdMob教程
- 下一篇: 混沌理论