SUNET is a raw light strategy server framework written in C++.
you can define epoll or select model as you want. the sockets are non-blocking and the epoll works under ET mode. Main thread maintains the epoll loop, and if there is a new connection from client, the main thread receives the data and hand it to the work thread queue.
task queue are visited by thread pool through a read-write thread lock. the work thread firstly parses the received data into Request format(url, method, params etc.), and then the strategy-mgr calls the method binded to the uri, and write the return data into Json Object.
algorithms are exists as plugins. you can add you own add you own algorithm modules by inherting the abstact class IStrategy and implement the virtual function defined in it. and then just defined the uri that your algorithm modules work on.
suppose your strategy.conf and sub.conf are defined as follows:
strategy.conf
[/]
TextStrategy:255
RewriteStrategy:255
[/search]
TextStrategy:255
RewriteStrategy:255
sub.conf
crf_model:/*/SUNET/alias/wordseg/model
port:9000
thread_cnt:10
log_level:15
log_path:./log/
You can start the server just by run [./sub port]. then you can visit the defined uri in you strategy.conf. for exammple.
curl -s http://ip:port/?q=南京市长江大桥
the response data should be:
{
"rewrite" : "yes",
"seg" : "南京市_长江_大桥_",
"text" : "yes"
}
cd io sh make.sh
5871381 fetches, 10 max parallel, 4.87325e+08 bytes, in 1000 seconds
83 mean bytes/connection
5871.38 fetches/sec, 487325 bytes/sec
msecs/connect: 0.0415055 mean, 3.225 max, 0.014 min
msecs/first-response: 1.65957 mean, 220.13 max, 0.713 min
HTTP response codes:
code 200 -- 5871381