SUNET
SUNET copied to clipboard
a light strategy server framework.
SUNET
SUNET is a raw light strategy server framework written in C++.
- Non-blocking IO model
- Multi-thread task queue
- Algorithm modules Configurable
Non-blocking IO Model
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.
Multi-thread task 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.
Algorithm modules Configurable
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.
Usage
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" }
Make
cd io sh make.sh
Test
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