1. 程式人生 > >Swoole學習筆記(五):多協議多端口

Swoole學習筆記(五):多協議多端口

ade ron 必須 tls serve ring xsocket 數據 處理方式

swoole中,接受數據流處理時,需要將數據流切分成小包才能進行功能的實現,以下為常見的幾個協議

1.EOF協議
EOF協議是用一組固定的,不會出現在數據內的字符作為數據分割的標記,簡稱EOF協議
EOF協議的格式如下:


DATA    |   EOF     |   DATA    |   EOF     |   ......

2.固定包頭協議
在數據部首加上一組固定格式的數據作為協議頭,稱為固定包體協議
協議頭的格式必須固定,其中需要標明後續數據的長度
長度字段格式只支持"S,L,N,V"和"s,l,n,v"


        header |     length       |     header  |     data      |

固定長度 | 數據長度 | 數據頭部 | 數據內容 |


3.函數實現
Swoole-1.8.0新增了對多端口混合協議的支持。Server可以監聽多個端口,每個端口都可以設置不同的協議處理方式(set)和回調函數(on)。SSL/TLS傳輸加密也可以只對特定的端口啟用。

函數原型:
swoole_server_port swoole_server->(string $host, int $port, int type)
其中,$type字段支持一下6種格式:
SWOOLE_TCP / SWOOLE_SOCK_TCP ipv4 TCP協議
SWOOLE_TCP6 / SWOOLE_SOCK_TCP6 ipv6 TCP協議

SWOOLE_UDP / SWOOLE_SOCK_UDP ipv4 UDP協議
SWOOLE_UDP6 / SWOOLE_SOCK_UDP6 ipv6 UDP協議
SWOOLE_UNIX_DGRAM UnixSocket 數據包格式
SWOOLE_UNIX_STREAM UnixSocket 數據流格式

註意,新創建的端口需要設置協議參數,否則會復用swoole_server的協議解析方式

監聽端口的swoole_server_port對象,可以調用set和on方法:
未調用set方法,設置協議處理選項的監聽端口,默認繼承主服務器的設置
未調用on方法,設置回調函數的監聽端口,默認使用主服務器的回調函數

不同監聽端口的回調函數,仍然是相同的Worker進程空間內執行

Swoole學習筆記(五):多協議多端口