¡¤ÄúÏÖÔÚµÄλÖ㺠ÔÆÒíÍøÂç >> ÎÄÕÂÖÐÐÄ >> ÍøÕ¾½¨Éè >> ÍøÕ¾½¨É迪·¢ >> phpÍøÕ¾¿ª·¢ >> [PHP]swoole_server¼¸¸ö½ø³ÌµÄ·Ö¹¤

[PHP]swoole_server¼¸¸ö½ø³ÌµÄ·Ö¹¤

×÷ÕߣºØýÃû      phpÍøÕ¾¿ª·¢±à¼­£ºadmin      ¸üÐÂʱ¼ä£º2022-07-23
readme.md��/Users/zjh/Documents/�ҵ�����/[php]swoole_server�������̵ķֹ�

[PHP]swoole_server���̵ķֹ�


ժҪ��Swoole��һ��PHP���Եĸ���������ͨ�ſ�ܣ��ṩ��PHP���Ե��첽���̷߳��������첽TCP/UDP����ͻ��ˣ��첽MySQL�����ݿ����ӳأ�AsyncTask����Ϣ���У����붨ʱ�����첽�ļ���д���첽DNS��ѯ��ǿ��Ĺ��ܣ��ɱ������ɸ��ֹ���ȷ�Ľ�����ʵ�֣�������ϸ�����¼������̵ķֹ����Ա������߸����ٵ�����Swoole��ܡ�


  • ����: http://www.cnblogs.com/jhzhu
  • ����: jhzhuustc@gmail.com
  • ����: ֪������
  • ʱ��: 2015-08-17

Ŀ¼

  • [PHP]swoole_server���̵ķֹ�
    • Ŀ¼
    • Swoole���
      • Swoole�����¶���PHP
      • ����չʾ����Ƭ��
        • TCP Server
        • TCP Client
    • ��Ҫ���̷���
      • Master����
      • Manager����
      • Worker����
      • Task����
    • �������¼��ص��Ķ�Ӧ��ϵ
      • Master�����ڵĻص�����
      • Worker�����ڵĻص�����
      • Task�����ڵĻص�����
      • Manager�����ڵĻص�����

Swoole���

Swoole����

Swoole�����¶���PHP

Swoole��PHP���Եĸ���������ͨ�ſ�ܣ��ṩ��PHP���Ե��첽���̷߳��������첽TCP/UDP����ͻ��ˣ��첽MySQL�����ݿ����ӳأ�AsyncTask����Ϣ���У����붨ʱ�����첽�ļ���д���첽DNS��ѯ�� Swoole��Ȼ�DZ�׼��PHP��չ��ʵ��������ͨ����չ��ͬ����ͨ����չֻ���ṩһ���⺯������swoole��չ�����к��ӹ�PHP�Ŀ���Ȩ�������¼�ѭ������IO�¼�������swoole���Զ��ص�ָ����PHP������

����չʾ����Ƭ��

TCP Server

$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 8,   //������������
    'daemonize' => true, //�Ƿ���Ϊ�ػ�����
));
$serv->on('connect', function ($serv, $fd){
    echo "Client:Connect.\n";
});
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Swoole: '.$data);
    $serv->close($fd);
});
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
$serv->start();

TCP Client

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
//�����¼��ص�����
$client->on("connect", function($cli) {
    $cli->send("hello world\n");
});
$client->on("receive", function($cli, $data){
    echo "Received: ".$data."\n";
});
$client->on("error", function($cli){
    echo "Connect failed\n";
});
$client->on("close", function($cli){
    echo "Connection close\n";
});
//������������
$client->connect('127.0.0.1', 9501, 0.5);

�������Ƭ�����swoole������

��Ҫ���̷���

Master����

Master������Ҫ������֤Swoole��ܻ��Ƶ����С����ᴴ�����������Ե��̣߳�

  • Reactor�߳�:������������TCP���ӣ��շ����ݵ��̡߳�swoole�����߳���Accept�µ����Ӻ󣬻Ὣ������ӷ����һ���̶���Reactor�̣߳���������̸߳��������socket����socket�ɶ�ʱ��ȡ���ݣ�������Э�������������Ͷ�ݵ�Worker���̡���socket��дʱ�����ݷ��͸�TCP�ͻ��ˡ�
  • Master�߳�(���̣߳�: ����Accept�µ����ӡ�UNIX PROXI�źŴ�������ʱ������
  • ����������̣߳����ԣ�
  • UDP�հ��̣߳����ԣ�

Manager����

swoole��Worker/Task���̶�����Manager����Fork�������ġ�

  • �ӽ��̽�������ʱ��manager���̸�����մ��ӽ��̣������Ϊ��ʬ���̡��������µ��ӽ���
  • �������ر�ʱ��manager���̽������źŸ������ӽ��̣�֪ͨ�ӽ��̹رշ���
  • ������reloadʱ��manager���̻�����ر�/�����ӽ���

Ϊʲô����Master�����أ���Ҫԭ����Master�����Ƕ��̵߳ģ����ܰ�ȫ��ִ��fork������

Worker����

  • ������Reactor�߳�Ͷ�ݵ��������ݰ�����ִ��PHP�ص�������������
  • ������Ӧ���ݲ�����Reactor�̣߳���Reactor�̷߳��͸�TCP�ͻ���
  • �������첽������ģʽ��Ҳ������ͬ������ģʽ
  • Worker�Զ���̵ķ�ʽ����

Swoole�ṩ�����ƵĽ��̹������ƣ���Worker�����쳣�˳����緢��PHP���������󡢱�����������ɱ����ﵽmax_request����֮�������˳��������̻����������µ�Worker���̡� Worker�����ڿ�������ͨ��apache+php����php-fpm��д���롣����Ҫ��Node.js����д�첽�ص��Ĵ��롣

Task����

  • ������Worker����ͨ��swoole_server->task/taskwait����Ͷ�ݵ�����
  • �������ñ£¬²ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ý·ï¿½ï¿½Ø¸ï¿½Worker����
  • ��ȫ��ͬ������ģʽ
  • Task�Զ���̵ķ�ʽ����

Task���̵�ȫ����task_worker���̣���һ�������worker���̡�����onWorkerStart��task������Ҳ�ᱻ���á���$worker_id >= $serv->setting['worker_num']ʱ��ʾ���������task_worker�����򣬴����˽�����worker���̡�

�������¼��ص��Ķ�Ӧ��ϵ

Master�����ڵĻص�����

onStart
onShutdown
onMasterConnect
onMasterClose
onTimer

Worker�����ڵĻص�����

onWorkerStart
onWorkerStop
onConnect
onClose
onReceive
onTimer
onFinish

Task�����ڵĻص�����

onTask
onWorkerStart

Manager�����ڵĻص�����

onManagerStart
onManagerStop