先貼出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等擴充...