2.0.1-Alpha
Swoole-2.0 �ṩ��PHPԭ��Э�̵�������PHP���������ͬ����ʽ��д���ײ�����ʹ���첽IO������������IO��ɺ��Զ��л�PHP��������ջ��
����Э�̲�����PHP��Yield/Generator���ʵ����������ͬ�����룬�첽IO��Swoole-2.0����Swoole-1.0�����ִ����ԣ�ͬʱ֧��ͬ���������첽�������ص���Э�� 3 �� IO ģ�͡�
Э�̿������Ϊ�û�̬�̣߳�ͨ��Э����������ռ�������л�������ڲ���ϵͳ���̻����̣߳�Э�����еIJ������������û�̬��ɣ��������л������ĸ��͡�Swoole����Ϊÿһ��������Ӧ��Э�̣�����IO��״̬������ص���Э�̡�
Swoole-2.0����Э�̵����ƣ�
-
�����߿���ʹ���ͳ��PHPͬ�����뷽ʽ����ʵ���첽IO����ȥʹ��Node.js��Swoole1.0��д�첽����ʱ����ʹ��Ƕ�ص�������Ч�ʵͣ�������֮��ά���������ѡ�����ʹ��Swoole-2.0����Э�̿������ɱ�д�첽�������
Callback Hell�� -
����Swoole-2.0���ڵײ��װ��Э�̣����ԶԱ�������PHPЭ�̿�ܣ���TSF��Zan�������߲���Ҫ����ʹ��
yield�ؼ�������ʶһ��Э��IO�л����������Բ�����Ҫ��yield�����������������Լ���ÿһ���ĵ��ö���Ϊyield���⼫�������˿���Ч�ʡ� -
Swoole-2.0����֧�ֳ�������TCP��UDP��HTTP��Redis��MySQLЭ�̿ͻ���֮�⣬��֧�ֲ���Client������ͬʱ����ִ�ж����ͬ���͵�Э�̿ͻ��˵��ã�ʱ��ΪMax(��ʱ�Client��ʱ��)����Go������Ҫʹ�÷dz����ӵ�
goroutine+chan+select����ʵ�֡�Swoole-2.0�IJ�������ʹ�ø��Ӽ�
��Ҫ���ԣ�
- �ײ�����Э�̣�ͬ���Ĵ��룬�첽��IO
- TCP/UDP/UnixSocketЭ�̿ͻ���
Swoole\Coroutine\Client - Http/WebSocketЭ�̿ͻ���
Swoole\Coroutine\HttpClient - RedisЭ�̿ͻ���
Swoole\Coroutine\Redis - MySQLЭ�̿ͻ���
Swoole\Coroutine\MySQL - ����Client
- ֧���첽��ʱ
- Ĭ�Ͽ��������ռ�
Ҫ��:
- ��ҪPHP5.5����߰汾
- ��ʱ��֧��PHP7
- �������˻���
Swoole\Server����Swoole\Http\Server���п�����Ŀǰ��֧����onRequet��onReceive��onConnect�ص���ʹ��Э��
��װ��ʽ:
Swoole-2.0��Ҫͨ�����--enable-coroutine�����������Э��������ʾ�����£�
phpize
./configure --with-php-config={path-to-php-config} --enable-coroutine
make
make install
��ӱ��������swoole server���л���Э��ģʽ
ʹ��ʾ��
TCPЭ�̿ͻ���
$client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
$client->connect('127.0.0.1', 9501, 0.5)
//����connect������Э���л�
$client->send("hello world\n");
echo $client->recv();
//����recv���ٴδ���Э���л�
$client->close();
HttpЭ�̿ͻ���
$cli = new Swoole\Coroutine\Http\Client('127.0.0.1', 80);
$cli->setHeaders([
'Host' => "localhost",
"User-Agent" => 'Chrome/49.0.2587.3',
'Accept' => 'text/html,application/xhtml+xml,application/xml',
'Accept-Encoding' => 'gzip',
]);
$cli->set([ 'timeout' => 1]);
$cli->get('/index.php');
echo $cli->body;
$cli->close();
RedisЭ�̿ͻ���
$redis = new Swoole\Coroutine\Redis();
$redis->connect('127.0.0.1', 6379);
$val = $redis->get('key');
MySQLЭ�̿ͻ���
$swoole_mysql = new Swoole\Coroutine\MySQL();
$swoole_mysql->connect(['host' => '127.0.0.1',
'user' => 'user',
'password' => 'pass',
'database' => 'test',
]);
$res = $swoole_mysql->query('select sleep(1)');
��������
$tcpclient = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
$tcpclient->connect('127.0.0.1', 9501, 0.5)
$tcpclient->send("hello world\n");
$redis = new Swoole\Coroutine\Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setDefer();
$redis->get('key');
$mysql = new Swoole\Coroutine\MySQL();
$mysql->connect(['host' => '127.0.0.1',
'user' => 'user',
'password' => 'pass',
'database' => 'test',
]);
$mysql->setDefer();
$mysql->query('select sleep(1)');
$httpclient = new Swoole\Coroutine\Http\Client('0.0.0.0', 9599);
$httpclient->setHeaders(['Host' => "api.mp.qq.com"]);
$httpclient->set([ 'timeout' => 1]);
$httpclient->setDefer();
$httpclient->get('/');
$tcp_res = $tcpclient->recv();
$redis_res = $redis->recv();
$mysql_res = $mysql->recv();
$http_res = $httpclient->recv();
ͨ�������һ��ҵ����������Ҫ��һ��redis�����һ��mysql������ô����IO����������
redis����->redis�հ�->mysql����->mysql�հ�
������������IO��ʱ��͵��� redis����IOʱ�� + mysql����IOʱ�䡣
������Э�̰汾��Client������IO������������
redis����->mysql����->redis�հ�->mysql�հ�
������������IO��ʱ��ͽӽ��� MAX(redis����IOʱ��, mysql����IOʱ��)��
����֧�ֲ��������Client�У�
- Swoole\Coroutine\Client
- Swoole\Coroutine\Redis
- Swoole\Coroutine\MySQL
- Swoole\Coroutine\Http\Client
����Swoole\Coroutine\Client������Client��ʵ����defer���ԣ����������ӳ��հ���
ע������
- ȫ�ֱ�����Э��ʹ��ԭ�е��첽��ͬ������������Э�̵��л�����ʽ�����ģ�������Э���л���ǰ���ܱ�֤ȫ�ֱ����Լ�static������һ���ԡ�
- ���������г����е���Э�̿ͻ��ˣ�
- ��������
__destruct() - ħ������
__call()
- ��������
- ��ǰ�汾ΪAlphaԤ���汾��������������������ʹ��
ʹ���°汾
- GitHub���ص�ַ��https://github.com/swoole/swoole-src/releases/tag/2.0.1-alpha
- ��Դ�й����ص�ַ��http://git.oschina.net/matyhtf/swoole/tree/2.0.1-alpha
- Swoole2.0ʹ���ĵ���http://wiki.swoole.com/wiki/page/p-coroutine.html
��������Ⱥ 494412579