php libevent 功能與使用方法詳解

2022-09-26 03:15:12 字數 4513 閱讀 2298

libevent是乙個基於事件驅動的高效能網路庫。支援多種 i/o 多路復用技術, epoll、 poll、 dev/poll、 select 和 kqueue 等;支援 i/o,定時器和訊號等事件;註冊事件優先順序。

常量如下:

值常量名含義1

ev_timeout

超過時間後事件成為啟用狀態

2ev_read

fd就緒,可以讀取的時候 ,事件成為啟用狀態

4ev_write

fd就緒,可以寫入的時候 ,事件成為啟用狀態

8ev_signal

用於實現訊號檢測

16ev_persist

表示事件是持久的

32ev_et

表示底層是否支援邊沿觸發事件

1evloop_once

如果設定了evloop_once,迴圈將等待某些事件成為啟用的,執行啟用的事件直到沒有更多的事件可以執行,然會返回。

2evloop_nonblock

如果設定了evloop_nonblock,迴圈不會等待事件被觸發:迴圈將僅僅檢測是否有事件已經就緒,可以立即觸發,如果有,則執行事件的**。

函式如下:

event_base_free() 釋放資源,這不能銷毀繫結事件

event_base_loop() 處理事件,根據指定的base來處理事件迴圈

event_base_loopbreak() 立即取消事件迴圈,行為各break語句相同

event_base_loopexit() 在指定的時間後退出迴圈

event_base_new() 建立並且初始事件

event_base_priority_init() 設定事件的優先順序

event_base_set() 關聯事件到事件base

event_buffer_base_set() 關聯快取的事件到event_base

event_buffer_disable() 禁用乙個快取的事件

event_buffer_enable() 啟用乙個指定的快取的事件

event_buffer_fd_set() 改變乙個快取的檔案系統描述

event_buffer_free() 釋放快取事件

event_buffer_new() 建立乙個新的快取事件

event_buffer_priority_set() 快取事件的優先順序設定

event_buffer_read() 讀取快取事件中的資料

event_buffer_set_callback() 給快取的事件設定或重置**函式

event_buffer_timeout_set() 給乙個快取的事件設定超時的讀寫時間

event_buffer_watermark_set 設定讀寫事件的水印標記

event_buffer_write() 向快取事件中寫入資料

event_add() 向指定的設定中新增乙個執行事件

event_del() 從設定的事件中移除事件

event_free() 清空事件控制代碼

ev程式設計客棧ent_new() 建立乙個新的事件

ev程式設計客棧ent_set() 準備想要在event_add中新增事件

例1如下:

<?php //建立和初始化新的事件庫

$base = event_base_new();

//建立並返回乙個新的事件資源

$event = event_new();

//準備乙個事件

event_set($event, 0, ev_timeout, function() );

//關聯事件到事件庫

event_base_set($event, $base);

//新增事件

event_add($event, 5000000);

//根據指定的事件庫來處理事件迴圈

event_base_loop($base);

上述**在等待了5秒後列印出run...後程式結束。

我們把上述**修改一下:

<?php //建立和初始化新的事件庫

$base = event_base_new();

//建立並返回乙個新的事件資源

$event = event_new();

//準備乙個事件

event_set($event, 0, ev_timeout | ev_persist, function() );

//關聯事件到事件庫

event_base_set($event, $base);

//新增事件

event_add($event, 1000000);

//根據指定的事件庫來處理事件迴圈

event_base_loop($base);

上述**會每隔1秒鐘列印出run...,只是因為我們在event_set時使用了ev_persist,表示該事件是乙個持久的。

例2如下:

<?php function printcontent($fd, $events, $args)

//建立和初始化新的事件庫

$base = event_base_new();

//建立並返回乙個新的事件資源

$event = event_new();

//這裡把標準輸入流傳入到函式printcontent中

$fd = stdin;

event_set($event, $fd, ev_persist | ev_timeout, 'printcontent', array($event, $base));

//關聯事件到事件庫

event_base_set($event, $base);

//新增事件

event_add($event, 1000000);

//根據指定的事件庫來處理事件迴圈

event_base_loop($base);

**每隔1秒鐘,會從標準輸入中讀取使用者輸入的內容,再列印出來。

例3如下:

<?php //建立套接字

$socket = stream_socket_server('tcp:', $errno, $errstr);

//設定資源流為非阻塞模式

stream_set_blocking($socket, 0);

//建立和初始化新的事件庫

$base = event_base_new();

//建立並返回乙個新的事件資源

$event = event_new();

//準備乙個事件

event_set($event, $socket, ev_persist | ev_read, 'accept', $base);

//關聯事件到事件庫

event_base_set($event, $base);

//新增事件

event_add($event);

//根據指定的事件庫來處理事件迴圈

event_base_loop($base);

function accept($socket, $events, $base)

function read($buffer, $client)

//給連線的socket客戶端寫入資料

fwrite($client, date('y-m-d h:i:s'));

error($buffer, '', $client);}

function error($buffer, $error, $client)

附:linux 下 php 安裝 libevent

一、安裝libevent庫

1、到libevent官網**安裝原始碼

如:libevent-2.0.22-stable.tar.gz

2、解壓原始碼包

> tar zxvf libevent-2.0.22-stable.tar.gz

> cd libevent-2.0.22-stable

3、configure

> ./configure --prefix=/usr/local/libevent

4、make && make install

> make

> make install

二、安裝php的libevent擴充套件

1、**位址如下:

如:libevent-0.1.0.tgz

2、解壓

> tar zxvf libevent-0.1.0.tgz

3、通過phpize命令生成configure

> /data/nmp/php/bin/phpize

(*如上路徑只作演示,具體視安裝環境而定。)

4、生成好後,執行configure

> ./configure --with-php-config=/data/nmp/php/bin/php-config --with-libevent=/usr/local/libevent

5、make && make install

> make

> make install

6、修改php.ini檔案,新增如下

extension=libevent.so

7、重啟伺服器

session cookie 功能與用法

session 1.儲存在伺服器,每個人存乙份 2.可以儲存任何型別的資料 3.有乙個預設過期的時間 相對安全 但是對伺服器造成的壓力大 注意 在所有使用session的頁面最頂端要開啟session session start session start 開啟session 儲存 session ...

Promise 功能與應用

promise 是非同步程式設計的一種解決方案 從語法上講,promise是乙個物件,從它可以獲取非同步操作的訊息 從本意上講,它是承諾,承諾它過一段時間會給你乙個結果。promise有三種狀態 pending 等待態 fulfiled 成功態 rejected 失敗態 狀態一旦改變,就不會再變。創...

Python enumerate函式功能與用法示例

eunmerate在英文中是列舉 列舉的意思,在python中eunmerate 是乙個內建的函式,用於在乙個可迭代或可遍歷的物件 如列表 字串 陣列 字典 中,將物件組成乙個乙個序列和索引,可以同時獲得索引和索引值。enumerate函式原型 enumera程式設計客棧te sequence,st...