問(wèn)題描述 PHP有內(nèi)置的服務(wù)器,就是PHP -S 命令,但這個(gè)命令是阻塞的,及時(shí)是加載js等靜態(tài)資源也都是阻塞的。 如果使用workerman代替這個(gè)命令,能非阻塞處理嗎? 為此你搜索到了哪些方案及不適用的原因 我的預(yù)期是,在windows上運(yùn)行后,可以非阻塞的發(fā)起請(qǐng)求,比如靜態(tài)資源和業(yè)務(wù)邏輯。最好的情況是,如果業(yè)務(wù)邏輯阻塞的話(huà),HTTP服務(wù)不要阻塞。 我希望把程序打包運(yùn)行,如果workerman能實(shí)現(xiàn)的話(huà),就不需要...
問(wèn)題描述 我需要長(zhǎng)期運(yùn)行一個(gè)外部的可以執(zhí)行文件,它帶有一個(gè)rpc服務(wù),然后在workerman里做一些定時(shí)器,定時(shí)請(qǐng)求rpc服務(wù)。我的想法是啟動(dòng)兩個(gè)worker,第一個(gè)用來(lái)執(zhí)行外部的命令,worker啟動(dòng)時(shí)啟動(dòng),worker退出時(shí)退出,另一個(gè)worker里做邏輯。 為此你搜索到了哪些方案及不適用的原因 在第一個(gè)worker里,好像不適合使用exec等命令,因?yàn)檫@些命令是阻塞的。那么直接簡(jiǎn)單使用exec呢? 我還使用s...
問(wèn)題描述 守護(hù)進(jìn)程重啟會(huì)強(qiáng)制終端正在進(jìn)行的操作嗎? 像下面代碼這樣: $worker->onWorkerStart = function (Worker $worker) { Timer::add( 0.1, function () { // 耗時(shí)操作,執(zhí)行五秒 file_get_content(xxx); ...
問(wèn)題描述 workerman應(yīng)該如何捕獲回調(diào)中的異常呢?除了在每個(gè)回調(diào)中使用try catch的寫(xiě)法,有沒(méi)有全局的寫(xiě)法,而且還不能影響進(jìn)程自動(dòng)重啟。 基本代碼 define('GLOBAL_START', 1); foreach (glob(app()->getBasePath() . '/worker/' . $this->commandName . '/start*.p...
workerman環(huán)境下是否有自身php實(shí)現(xiàn)的隊(duì)列功能。我想咨詢(xún)的并不是依賴(lài)redis或其他的服務(wù)的方案。而是workerman自己實(shí)現(xiàn)的一個(gè)服務(wù)。 我想要的場(chǎng)景也很簡(jiǎn)單,其實(shí)就是redis的list中的push功能和blPop命令。 有一個(gè)進(jìn)程會(huì)向隊(duì)列插入 id,其他的 進(jìn)程隨時(shí)消費(fèi)獲取id。不能出現(xiàn)重復(fù)分配。 裝redis自然是能用,但是有沒(méi)有人用workerman實(shí)現(xiàn)過(guò)這個(gè)場(chǎng)景的服務(wù)嗎。 最終想要的效果代碼其實(shí)...
問(wèn)題描述 長(zhǎng)連接轉(zhuǎn)發(fā)會(huì)阻塞嗎?我想對(duì)后端的請(qǐng)求做一個(gè)并發(fā)控制,超出的來(lái)自前端連接暫時(shí)不處理,會(huì)阻塞嗎,會(huì)斷開(kāi)嗎? 我也有比較豐富的workerman開(kāi)發(fā)經(jīng)驗(yàn),做個(gè)聊天服務(wù)端、物聯(lián)網(wǎng)服務(wù)端、內(nèi)網(wǎng)穿透、端口轉(zhuǎn)發(fā)等等。但是上面這個(gè)問(wèn)題,還是比較糾結(jié)。 我想做的是這樣的,后端運(yùn)行的是圖片轉(zhuǎn)換的http服務(wù),但是很吃硬件,超出內(nèi)存會(huì)出錯(cuò),所以要限制并發(fā),而且一次請(qǐng)求響應(yīng)的時(shí)間很長(zhǎng)。 所以來(lái)自前端的連接,我打算通過(guò)workerm...
有沒(méi)有基于GlobalData作為底層的,實(shí)現(xiàn)了標(biāo)準(zhǔn)緩存接口的擴(kuò)展庫(kù)? 就是實(shí)現(xiàn)了:Psr\SimpleCache\CacheInterface的擴(kuò)展庫(kù)。...
iptables -A INPUT -p tcp --dport 8080:9090 -j ACCEPT iptables -A OUTPUT -p tcp --sport 8080:9090 -j ACCEPT iptables-save iptables可以監(jiān)聽(tīng)一個(gè)端口范圍,workerman能否做到呢? 如果每個(gè)端口都是實(shí)例化一個(gè)worker監(jiān)聽(tīng),這個(gè)我會(huì),但是感覺(jué)太不優(yōu)雅了,如果我要監(jiān)...
我希望自定義 status 信號(hào)的輸出的內(nèi)容,看代碼的話(huà),只能重寫(xiě) formatStatusData方法或者 parseCommand,有沒(méi)有可能增加一個(gè)自定義回調(diào)的借口呢,比如給worker定義一個(gè)方法,這個(gè)方法只能返回字符串.拼接到formatStatusData的底部....
比如:一個(gè)進(jìn)程,監(jiān)聽(tīng)0.0.0.0:443地址,當(dāng)有連接請(qǐng)求時(shí),根據(jù)不同的域名,使用相對(duì)應(yīng)的ssl證書(shū)去解密. 就是先有一個(gè)socket,不設(shè)置ssl證書(shū),等連接來(lái)時(shí),根據(jù)不同的域名,給socket配置相應(yīng)的證書(shū), ? 不過(guò)我看https原理發(fā)現(xiàn)這樣不通,https是先進(jìn)性ssl握手,之后再將數(shù)據(jù)返回到上層, ? 想實(shí)現(xiàn)這個(gè)效果用workerman能嗎,php能嗎. ? 就跟nginx是的,配置好每個(gè)域名對(duì)應(yīng)的證書(shū),...
在linux下,運(yùn)行了一個(gè)worker,里面有邏輯,根據(jù)情況new 一個(gè)新的worker,并且run(),這樣一個(gè)新的進(jìn)程worker便運(yùn)行.但是怎么結(jié)束呢, 我試過(guò)用stop(),但是當(dāng)我在終端結(jié)束進(jìn)程時(shí),發(fā)現(xiàn)會(huì)輸出很多worker 結(jié)束的信息,似乎調(diào)用了stop并沒(méi)有回收進(jìn)程; ? 比如我在worker里定時(shí)每秒new worker 并且run() 并且 stop(),十秒后,按理來(lái)說(shuō)新開(kāi)了十個(gè)進(jìn)程并且也結(jié)束了,...
https://github.com/walkor/Workerman/pull/396 原本的http協(xié)議不能把上傳的文件處理成和其他服務(wù)器一樣的效果,比如我在使用thinkphp時(shí),thinkphp的上傳文件處理類(lèi)并不能用,而這并不是thinkphp的鍋,http協(xié)議處理上傳文件的方法確實(shí)不符合一般的服務(wù)器文件上傳效果.可以處理下嗎,或者至少讓這個(gè)文件處理方法parseUploadFiles能夠被重寫(xiě). ? 這個(gè)...
監(jiān)聽(tīng)的udp端口6000, worker里有一個(gè)listen和unlisten方法,我希望在一個(gè)邏輯地方,unlisten,使用異步udp發(fā)起一個(gè)連接,指定使用6000端口發(fā)起,然后調(diào)用listen. 但是為什么還是報(bào)already in use 錯(cuò)誤. 代碼如下: $server就是監(jiān)聽(tīng)在4788下的worker, 這段代碼寫(xiě)在一個(gè)回調(diào)里面, 打印unlisten的信息(改worker.php),確實(shí)關(guān)閉了sock...
假設(shè)用4788端口異步發(fā)起udp連接,然后斷開(kāi),向第二個(gè)人發(fā)送,此時(shí)第一個(gè)人發(fā)來(lái)消息,能否觸發(fā)onmessage. 比如我是s 使用$context 指定 sock band_to 4788端口 向a.a.a.a:a發(fā)起udp連接并發(fā)送數(shù)據(jù),然后關(guān)閉連接.緊接著又向b.b.b.b:b發(fā)起一個(gè)udp鏈接,此時(shí)a發(fā)來(lái)消息,請(qǐng)問(wèn)這個(gè)a發(fā)來(lái)的連接能否觸發(fā)onmessage,還是說(shuō)a發(fā)來(lái)的數(shù)據(jù)就"丟失了"...
(udp)能不能使用監(jiān)聽(tīng)的端口發(fā)消息?比如監(jiān)聽(tīng)udp,4778,向其他服務(wù)器主動(dòng)發(fā)消息時(shí),也用4778發(fā)出. 我測(cè)試的是不可以的,使用reusePort也不行,我的寫(xiě)法如下: $a = new Worker(xxx:4778); $a->reusePort = true; $a->onWorkerStart = function(){ $opts = ; $n = new AsyncUdp...
需求目標(biāo): 我有一份自定義協(xié)議,實(shí)質(zhì)上有且只有3個(gè)回調(diào)事件,比如onA,onB,onC,是否可以通過(guò)自義定協(xié)議的解包方法(decode)實(shí)現(xiàn)調(diào)用上述三個(gè)事件,而不用去理會(huì)onMessage. ? 試圖實(shí)現(xiàn)的方法: 我在自定義協(xié)議的decode的邏輯里,在解包邏輯之后,分別通過(guò)call_user_function,調(diào)用連接對(duì)象中不同的回調(diào)事件,最后return '' ? 這也是合理的設(shè)計(jì)嗎? ? 以下截圖是websoc...
我希望做的是使用worke實(shí)例化時(shí),使用我自定義的協(xié)議,直接監(jiān)聽(tīng)udp端口. 手冊(cè)上在介紹自定義協(xié)議時(shí)沒(méi)有介紹該協(xié)議是在tcp下使用的還是udp下使用的,而我在看內(nèi)置的協(xié)議時(shí),發(fā)現(xiàn)有的協(xié)議指定連接必須是tcp對(duì)象,有的是連接的抽象對(duì)象,有的沒(méi)有指定,如圖,從上到下依次是text,ws,websocket. , 如果我自定義的協(xié)議只能給udp使用,是不是要用udp的類(lèi)做連接. 還是說(shuō)無(wú)論協(xié)議如何定制,想實(shí)現(xiàn)tcp或者...