spserver

来源:互联网 发布:淘宝内部群是真的吗 编辑:程序博客网 时间:2024/05/16 09:21

 为了搭一个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:

  1. 一个群发聊天软件,任何一个客户端说的话,所有其它客户端都会收到。发送quit是退出。
  2. 模拟大量客户端,连接服务器的5555端口。每200毫秒发一句话,看并发量怎样。
  3. 如果不知道客户端怎样编写,请使用telnet ip 5555命令来模拟聊天过程就可以了。

至于怎样写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 的错误。
限于目前没有更高配置的机器,没有办法做更大并发的测试。如果有人有兴趣,可以帮忙做一下测试。

 

暂时就这么多吧
原创粉丝点击