swoole原始碼分析

2021-07-27 03:46:57 字數 2927 閱讀 5554

先貼出php的** php 核心方面關於 zend api 以後有時間會再做 學習的

$server = new server("0.0.0.0", 9501);

$server->set(array(

'worker_num' => 1,

'daemonize' => true,

// 'max_request' => 50000,

// 'dispatch_mode' => 2,

// 'package_max_length' => 4096,

'open_length_check' => true,

'package_length_offset' => 0,

'package_body_offset' => 0,

'package_length_type' => "n",//0 後 n(4位)是長度

'open_cpu_affinity' => true,

'log_file' => dirname(__file__) . '/log/socket.log'

));$server->on('connect', function

($server, $fd):connect.\n";

});$server->on('start', function

() );

$server->on('managerstart', function

() );

$server->on('workerstart', function

($server, $worker_id)

use($ip) );

$server->on('receive', function

(server $server, $fd, $from_id, $data)

}catch (errorexception $e)catch (exception

$e)});

$server->on('close', function

(server $server, $fd)

use($ip) : close.\n";

});

找到 原始碼中的swoole_server.c 中的**

定位到 php_method(swoole_server, __construct)這裡 也就是 server的構造方法.

function __construct($host, $port, $mode = swoole_process, $sock_type = swoole_sock_tcp)

/** * new swoole_server 構造函式引數

*/define('swoole_process', 3); //使用程序模式,業務**在worker程序中執行

define('swoole_sock_tcp', 1); //建立tcp socket

建立 swserver 物件 並初始化

建立 swooleg 物件 並初始化 //local global variable

swooleg中系統的一些引數,和 memory_pool

建立 swoolewg 物件 並初始化 //worker global variable

swserver *serv = sw_malloc(sizeof (swserver));

bzero(&swooleg, sizeof(swooleg));

bzero(&swoolewg, sizeof(swoolewg));

swooleg.memory_pool = swmemoryglobal_new(sw_global_memory_pagesize, 1);

//init global lock

swmutex_create(&swoolegs->lock, 1);

swmutex_create(&swoolegs->lock_2, 1);

swmutex_create(&swooleg.lock, 0);

分析

swmemorypool* swmemoryglobal_new(int pagesize, char shared)

//分配記憶體需要加鎖 建立 互斥鎖

if (swmutex_create(&gm.lock, 1) < 0)

//root

gm.root_page = first_page;

gm.cur_page = first_page;

gm_ptr = (swmemoryglobal *) gm.mem;

gm.offset += sizeof(swmemoryglobal);

swmemorypool *allocator = (swmemorypool *) (gm.mem + gm.offset);

gm.offset += sizeof(swmemorypool);

allocator->object = gm_ptr;

allocator->alloc = swmemoryglobal_alloc;

allocator->destroy = swmemoryglobal_destroy;

allocator->free = swmemoryglobal_free;

memcpy(gm_ptr, &gm, sizeof(gm));

return allocator;

}

void* sw_shm_malloc(size_t size)

else

}

sw_shm_malloc個人的理解是 得到一片size+sizeof(swsharememory)大小的記憶體塊

把 swsharememory物件插入 記憶體的起始位置 並返回 之後的指標(size要用到的記憶體的起始指標)

swoole原始碼安裝

swoole安裝 你好,我是一名phper。在這裡分享一些自己學習的心得,和一些知識點的理解,以及學習中遇到的一些問題 1.解壓tar xjvf php 7.2.2.tar.bz2 2.configure 對即將安裝的軟體進行一些配置 configure help 這樣可以檢視有哪些引數 confi...

原始碼安裝swoole

curl o tmp swoole.tar.gz l tar zxvf tmp swoole.tar.gz 解壓完成之後進入到我們解壓的目錄裡發現沒有configure 因為我們要通過configure來進行安裝 這裡就要執行 php裡的 bin裡邊的 phpize 檔案.configure wit...

原始碼編譯安裝 swoole

git clone 利用phpize bin目錄下 1 phpize是幹嘛的?phpize是什麼東西呢?php官方的說明 phpize是用來擴充套件php擴充套件模組的,通過phpize可以建立php的外掛程式模組 比如你想在原來編譯好的php中加入memcached或者imagemagick等擴充...