coroutine and Swoole based php server framework in tencent
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin 添加版权说明 Oct 24, 2017
conf update Jul 4, 2015
examples/src 添加版权说明 Oct 24, 2017
image 代码格式化以及添加图片 Aug 4, 2015
lib 添加版权说明 Oct 24, 2017
LICENSE.TXT Create LICENSE.TXT Oct 21, 2017 Update Oct 24, 2017

Tencent Server Framework


Tencent Server Framework is a coroutine and Swoole based server framework for fast server deployment which developed by Tencent engineers.


  • PHP Based. Compared with C++, the framework is more efficient in developing and programing.
  • based on Swoole extension. powerful async IO, timers and other infrastructure capacity can be used in this framework.
  • support PHP coroutine. Synchronous programing is possible using the coroutine schedule system, and can lead to the similar server capability with that of server deveoped in an asynchronous way.
  • support server monitor and provide interface to add more rules


  • php5.5+
  • Swoole1.7.18+
  • linux,OS X



  • Tencent Server Framework can help you to start your server quickly,you just need to set a few settings

Server config

vim server.ini

;server type:tcpudphttp
type = http
; port
listen[] = 12312
; entrance file
root = '/data/web_deployment/serv/test/index.php'
;php start path
php = '/usr/local/php/bin/php'

; worker process num
worker_num = 16
; task process num
task_worker_num = 0
; dispatch mode
dispatch_mode = 2
; daemonize
daemonize = 1
; system log
log_file = '/data/log/test.log'

How to start your server

cd /root/tsf/bin/
php swoole testHttpServ start
  • Support Cmds: start,stop,reload,restart,status,shutdown,startall,list

How to use TCP/UDP/HTTP Client

  • we support different network protocols: TCP,UDP,HTTP

  $tcpReturn=(yield $this->tcpTest());
  $udpReturn=(yield $this->udpTest());

  $httpReturn=(yield $this->httpTest());

  public function tcpTest(){
    $ip = '';
    $port = '9905';
    $data = 'test';
    $timeout = 0.5; //second
    yield new Swoole\Client\TCP($ip, $port, $data, $timeout);
  public function udpTest(){
    $ip = '';
    $port = '9905';
    $data = 'test';
    $timeout = 0.5; //second
    yield new Swoole\Client\UDP($ip, $port, $data, $timeout);
  public function httpTest(){
    $httpRequest= new Swoole\Client\HTTP($url);
    $header = array(
      'Content-Length' => 12345,
    yield $httpRequest->get($url); //yield $httpRequest->post($path, $data, $header);

How to use Muticall

  • Beside that,we also support Muticall:
  • you can use Muticall to send TCP,UDP packets at the sametime
  • when all the requests come back,return to interrupt
  $res = (yield $this->muticallTest());
  public function muticallTest(){
    $calls=new Swoole\Client\Multi();
    $firstReq=new Swoole\Client\TCP($ip, $port, $data, $timeout);
    $secondReq=new Swoole\Client\UDP($ip, $port, $data, $timeout);
    $thirdReq= new Swoole\Client\HTTP("");

    $calls ->request($firstReq,'first');             //first request
    $calls ->request($secondReq,'second');             //second request
    $calls ->request($thirdReq,'third');             //third request
    yield $calls;


Concect to mysql async

    $sql = new Swoole\Client\MYSQL(array('host' => '', 'port' => 3345, 'user' => 'root', 'password' => 'root', 'database' => 'test', 'charset' => 'utf-8',));
    $ret = (yield $sql ->query('show tables'));
    $ret = (yield $sql ->query('desc test'));


  • We support individuation route rules
  • now we realize some universal route rules and restful rules
  • besides that, we also support default GET parameter
  URL                                       METHOD       CONTROLLER  ACTION              ANY     ==>  TestController/ActionIndex         ANY     ==>  TestController/ActionSend
  Restful                  GET     ==>  TestController/ActionList          GET     ==>  TestController/ActionView
                                                         Get['id']=22             POST    ==>  TestController/ActionCreate          PUT     ==>  TestController/ActionUpdate
                                                         Get['id']=22          DELETE  ==>  TestController/ActionDelete
                                                         Get['id']=22   GET     ==>  TestController/ActionSend
                                                         Get['cid']=1 Get['name']=li



Your contribution to TSF development is very welcome!

You may contribute in the following ways: