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