php現有的應用方式都是基於http的,對於需要快速即時回應的情況比較乏力,例如網路遊戲或推送服務一般都需要與使用者長期保持一個tcp連接以便即時回應和推送訊息。
swoole就是解決這樣套用場景的。 中使用中使用「建議學習: swoole視訊教學)
Swoole的實作問題wo#dwo#b#d 。
swoole並沒有用libevent,所以不需要安裝libevent
swoole不依賴php的stream/sockets/pcntl/posix/sysvmsg等擴充
#socket部分swoole使用底層的socket系統呼叫。
IO事件循環主進程的事件循環使用select/poll,因為主執行緒中的檔案描述符只有幾個,使用select/poll即可
reactor線程/worker進程中使用epoll/kqueue
task進程沒有事件循環,進程會循環阻塞讀取管道
有很多人使用strace -p去查看swoole主進程只能看到poll系統呼叫。正確的檢視方法是strace -f -p
多行程/多執行緒多行程使用fork()系統呼叫
多執行緒使用pthread執行緒庫
EventFdSwoole中使用了eventfd作為執行緒/進程間訊息通知的機制。
TimerfdSwoole使用timerfd來實作定時器
SIgnalfdswoole中使用了signalfd來實現對訊號的屏蔽和處理。可以有效避免執行緒/程序被訊號打斷,系統呼叫restart的問題。在主行程中reactor執行緒不會接受任何訊號。
以上是swoole解決了什麼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!