TSF:腾讯推出的 PHP 协程方案

jopen 9年前

Tencent Server Framework

Overview

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

Features

  • 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

Requirements

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

Installation

Introduction

  • 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]  ;server type:tcp,udp,http  type = http  ; port  listen[] = 12312  ; entrance file  root = '/data/web_deployment/serv/test/index.php'  ;php start path  php = '/usr/local/php/bin/php'    [setting]  ; 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 you server

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

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 = '127.0.0.1';      $port = '9905';      $data = 'test';      $timeout = 0.5; //second      yield new Swoole\Client\TCP($ip, $port, $data, $timeout);    }      public function udpTest(){      $ip = '127.0.0.1';      $port = '9905';      $data = 'test';      $timeout = 0.5; //second      yield new Swoole\Client\UDP($ip, $port, $data, $timeout);    }      public function httpTest(){      $url='http://www.qq.com';      $httpRequest= new Swoole\Client\HTTP($url);      $data='testdata';      $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);      $calls ->request($firstReq,'first');             //first request      $calls ->request($secondReq,'second');             //second request      yield $calls;    }      var_dump($res)

项目主页:http://www.open-open.com/lib/view/home/1436165046052