Swoole學習總結1

2022-02-22 07:49:48 字數 2148 閱讀 5067

一,swoole服務三種模式(預設是多程序模式)

# base

模式(swoole_base

)傳統的非同步非阻塞server

,reactor

和worker

是同乙個角色。tcp

連線是在worker

程序中維持的。

如果客戶端連線之間不需要互動,可以使用base

模式。如memcache

伺服器等。

# 執行緒模式

多執行緒worker

模式,reactor

執行緒來處理網路事件輪詢,讀取資料。得到的請求交給worker

執行緒去處理。

缺點:乙個執行緒發生記憶體錯誤,整個程序會全部結束。

由於php

的zendvm

在多執行緒模式存在記憶體錯誤,多執行緒模式在v1.6.0

版本後已關閉。

# 程序模式

與多執行緒worker

模式不同的是,執行緒換成了程序。reactor

執行緒來處理網路事件輪詢,讀取資料。得到的請求交給worker

程序去處理。適合業務邏輯非常複雜的場景。如websocket

伺服器等。

二,程序的關係介紹:

乙個最基礎的swoole server,至少需要有3個程序,分別是master程序、manager程序和worker程序

master程序是乙個多執行緒程序,其中有一組非常重要的執行緒,叫做reactor執行緒(組),每當乙個客戶端連線上伺服器的時候,都會由master

程序從已有的reactor

執行緒中,根據一定規則挑選乙個,

專門負責向這個客戶端提供維持鏈結、處理網路io

與收發資料等服務。分包拆包等功能也是在這裡完成。

manager

程序,某種意義上可以看做乙個**層,它本身並不直接處理業務,其主要工作是將master程序中收到的資料轉交給worker程序,或者將worker程序中希望發給客戶端的資料轉交給master程序進行傳送。

manager

程序還負責監控worker程序,如果worker程序因為某些意外掛程式了,manager程序會重新拉起新的worker程序,有點像supervisor的工作。而這個特性,也是最終實現熱過載的核心機制。

worker

程序其實就是處理各種業務工作的程序,manager將資料報轉交給worker程序,然後worker程序進行具體的處理,並根據實際情況將結果反饋給客戶端。

三,程式設計須知

程式設計須知

1.不要在**中執行

sleep以及其他睡眠函式,這樣會導致整個程序阻塞

2.exit/die是危險的,會導致

worker程序退出

3.可通過

register_shutdown_function來捕獲致命錯誤,在程序異常退出時做一些請求工作,具體參看

/wiki/page/305.html

4.php**中如果有異常丟擲,必須在**函式中進行

try/catch捕獲異常,否則會導致工作程序退出

5.swoole不支援

set_exception_handler,必須使用

try/catch方式處理異常

6.worker程序不得共用同乙個

redis或

mysql等網路服務客戶端,

redis/mysql建立連線的相關**可以放到

onworkerstart**函式中。原因是如果共用

1個連線,那麼返回的結果無法保證被哪個程序處理。持有連線的程序理論上都可以對這個連線進行讀寫,這樣資料就發生錯亂了。具體參考

/wiki/page/325.html

7. 不能使用類的屬性儲存客戶端連線資訊,因為乙個

worker程序可以處理多個客戶端連線,導致類屬性資料錯亂。常量則是可以的。

swoole 學習筆記(1)

解壓 configure make make install tips php i grep php.ini 檢視php.ini 配置檔案位置 獲取原始碼 swoole官網 phpize 生成configure 檔案 configure make make install configure ena...

swoole深入學習 1 swoole初始

swoole在php圈火了這麼久,從2年前我用node寫socket聊天伺服器的時候就火了,那時候,經常有類似的文章php swoole完爆nodejs之類的文章來吸引眼球,先不說它的好與壞,單單說他的出現,確實給php注入了一股新的活力。首先,php是單程序的,沒法在乙個程式塊中使用多程序來處理乙...

Swoole學習 Swoole入門指南

初識swoole swoole官網 swoole官方文件 入門書籍 tcp ip網路程式設計 尹聖雨 韓 深入書籍 unix環境高階程式設計 中文第三版 unix網路程式設計卷1 套接字聯網 unix網路程式設計卷2 程序間通訊 版本已更新至4.3.x。swoole2.0增加協程。swoole3.0...