前言 workerman v5在經(jīng)歷了幾年的開發(fā)和測試,于2025年元旦正式發(fā)布,webman開發(fā)框架及眾多周邊插件也緊隨其后更新兼容了v5版本;作為PHP界老牌的網(wǎng)絡(luò)容器,workerman的穩(wěn)定性及易用性毋庸置疑,常駐內(nèi)存的運行模式、多進程、多協(xié)議支持等高性能高效率的特性讓許多PHPer接觸到了之前不曾觸摸過的技術(shù)方向;那么v5版本相較于之前版本給開發(fā)者帶來了什么比較明顯且用的上的特性呢? 以revolt/ev...
前言 這段時間本身比較忙,也很少在關(guān)注技術(shù)相關(guān)的點,上個月空了剛好有時間看看群里,結(jié)果發(fā)現(xiàn)大家在討論協(xié)程以及webman/workerman的劣勢-阻塞退化問題,本來說是稍稍提兩下實現(xiàn)方向,結(jié)果一來二去直接弄了一個插件出來,經(jīng)過反反復(fù)復(fù)修改,最后發(fā)布了webman-coroutine插件 現(xiàn)狀 workerman/webman的阻塞退化問題 workerman是標準的master/worker多進程模型,master...
前言 目前我是一名Golang/Python開發(fā)工程師,之前是主要使用PHP進行開發(fā)的傳統(tǒng)web后端工程師,后面因為工作原因開始接觸并使用Python和Golang來做一些開發(fā)工作,涉及到數(shù)據(jù)分析數(shù)倉建設(shè)相關(guān)及部分游戲相關(guān)的開發(fā);也因為工作原因接觸到了很多其他語言的特性或者是其他語言團體推崇的技術(shù)方向方案。 我非常喜歡PHP,生活中工作中幾乎是能用PHP解決的都盡可能使用PHP,同時也很推崇PHP-cli的開發(fā)模式,...
前言 今年接觸了一個策略類手游相關(guān)的項目,后端本身計劃是使用skynet進行開發(fā)的,后來結(jié)合項目的時間緊急程度和客戶端開發(fā)組討論后決定使用PHP進行快速開發(fā),后期再使用其他語言框架進行拆分業(yè)務(wù);綜合考慮最后選用了webman作為主要開發(fā)框架。 整體項目分為配置服務(wù)、http-api服務(wù)、websocket服務(wù)三大部分,其中配置管理主要是兼容客戶端生成的配置數(shù)據(jù)進行導(dǎo)入導(dǎo)出轉(zhuǎn)換加載,底層使用MySQL進行儲存,多服務(wù)間...
增加一個LongPollingResponse類,繼承support\Response namespace support; use Respect\Validation\Rules\Time; use Workerman\Timer; /** * Class LongPollingResponse * @package support */ class LongPollingResponse ext...
workbunny/process 我在做非常輕量的任務(wù)調(diào)度服務(wù)的時候剛好順帶擼了一下PHP多進程相關(guān)的內(nèi)容,總共寫了不到300行代碼,能夠幫助理解workerman是如何進行多進程處理的; 已經(jīng)做了一些測試用例,把基本上常規(guī)的操作都覆蓋了,隨后還會補充更多的測試做覆蓋; 另外說一下,這玩意兒其實可以用在workerman/webman里,當然這種操作比較騷(不建議,畢竟這是進程不是線程); 可以進行進程的嵌套for...
?? 最新更新于2020-06-02 前言 最早接觸reactor模型的時候,應(yīng)該是在參與一個叫zanphp項目的時候,他是一個類似swoole的php拓展項目,當然它們之間的故事我就不多說了,也有一些沖突和迷茫;在那個時間段的PHP發(fā)展還是很蓬勃向上的,那時候的滴滴、有贊、百度都有很多很多PHP項目,那時候的原生PHP有許多許多的瓶頸,所以國內(nèi)那時候涌現(xiàn)了很多使用C來為PHP加速的開發(fā)者。 隨著PHP慢慢發(fā)展,P...
前言 我是一名后端開發(fā)工程師,目前從事后端開發(fā)有8年的經(jīng)驗,主要以PHP開發(fā)為主,期間有1年時間使用C語言進行PHP拓展的開發(fā)工作, 工作主要圍繞輔助線程及有棧協(xié)程調(diào)度器;還有2年主要使用Golang做一些基礎(chǔ)服務(wù)。 這篇文章我會用一些通俗的話來描述一些我所了解的程序的一些點,如 異步、同步、阻塞、非阻塞等;當然,我的經(jīng)驗不算豐富也可能有些理解錯誤的地方, 也希望能夠指正我描述有錯誤的部分。 程序出生了 程序最開始就...
前言 我目前所在的部門主要是負責公司的數(shù)據(jù)相關(guān)的內(nèi)容,可以理解為數(shù)據(jù)統(tǒng)計,做的工作其實也比較復(fù)雜,除了做一些數(shù)據(jù)統(tǒng)計分析業(yè)務(wù)之外,需要做一些基礎(chǔ)服務(wù)的開發(fā);我部門因為內(nèi)部開發(fā)語言并不統(tǒng)一,在這種情況下,項目被動的分成了A\B\C\D等子項目,并沒有將項目合并到一個項目中開發(fā),在這種過程中,被動的接受了SOA這樣的結(jié)構(gòu)。 A項目是一個任務(wù)的調(diào)度分配服務(wù),可以理解為一個大型的腳本/定時執(zhí)行器,有點類似與現(xiàn)在比較流行的se...
webman剛出來的時候我閱讀過webman的代碼,也閱讀過其他框架的代碼,然后我自己擼了一個框架casualman,最早單純只是為了玩,后面我把他運用在了公司部分項目的生產(chǎn)環(huán)境,已經(jīng)穩(wěn)定運行了半年以上了。 在這個過程中,結(jié)合我自己的一些個人習慣和我看到的其他框架的一些好的地方,我發(fā)現(xiàn)webman的代碼在一些地方可以被建議: 入口文件start.php比較凌亂臃腫 其實本著可以用就沒問題的思路,我覺得代碼寫成什么樣,...
這個項目由來很久了,大概至少有6年的歷史,最早我工作的時候接觸的一個項目叫struct,他可以把數(shù)組映射到對象屬性上進行數(shù)據(jù)類型內(nèi)容等判斷或者過濾,也可以進行轉(zhuǎn)換,也可以自行注冊handle進行過濾、判斷;后來我把這個項目重構(gòu)了一下,適用在常駐內(nèi)存的環(huán)境下,同時,這個項目也是我用在生產(chǎn)環(huán)境中的一個項目; 這個項目有點像殘疾的注解,不過我覺得用起來還挺好的,所以推薦給大家 測試覆蓋率應(yīng)該超過了80%,常用的幾種方案都是...
我在使用該項目過程中,曾出現(xiàn)過timer無限制遞增的情況,也出現(xiàn)過服務(wù)端主動踢出連接無法消費等問題,遂自己重寫了一個amqp客戶端; 后來我回過頭觀察分析workerman/rabbitmq源碼的時候,發(fā)現(xiàn)了一些可以被建議的地方: 源碼在如下位置會反復(fù)創(chuàng)建定時器 Client.php 160 - 170 行位置已經(jīng)創(chuàng)建了一個持續(xù)的定時器 })->then(function () { ...