長連接轉(zhuǎn)發(fā)會阻塞嗎?我想對后端的請求做一個并發(fā)控制,超出的來自前端連接暫時不處理,會阻塞嗎,會斷開嗎?
我也有比較豐富的workerman開發(fā)經(jīng)驗,做個聊天服務端、物聯(lián)網(wǎng)服務端、內(nèi)網(wǎng)穿透、端口轉(zhuǎn)發(fā)等等。但是上面這個問題,還是比較糾結(jié)。
我想做的是這樣的,后端運行的是圖片轉(zhuǎn)換的http服務,但是很吃硬件,超出內(nèi)存會出錯,所以要限制并發(fā),而且一次請求響應的時間很長。
所以來自前端的連接,我打算通過workerman做個代理?;镜牧鞒滔拢?br />
可以看到,實際上流程很簡單。
這里要注意的是:
所以我的問題是:
是不是需要做特殊的代碼處理。
因為我能想到的代碼基本如下:
$worker::$serverConnectionCount = 0;
$worker::$clientConnectionHub = [];
$worker->onWorkerStart = function(){
Timer::add(function(){
if($worker::$serverConnectionCount <4) {
$client_conn = array_pop($worker::$clientConnectionHub);
$server_conn = new AsyncTcpConnection('后端服務地址')
$client_conn->pipe($server_conn);
$server_conn->pipe($client_conn);
//實際上應該自定義實現(xiàn)轉(zhuǎn)發(fā),可以在onClose時調(diào)整$serverConnectionCount的值
$worker::$serverConnectionCount++;
}
},10)
}
$worker->onConnect = function($connection){
$worker:$clientConnectionHub[] = $connection;
}
等待后端空閑時收到的連接會斷開嗎(因為這中間不會傳輸心跳以維持鏈接,這是個Http的請求)
可能會斷開,瀏覽器可能會在一定時間內(nèi)沒收到響應就返回超時,這個時間猜測在1分鐘左右。
另外外網(wǎng)環(huán)境連接超過1分鐘不通訊連接可能就被路由節(jié)點清理了。
后端的響應時間是比較長的,會發(fā)生阻塞嗎?
workerman作為網(wǎng)絡代理不會發(fā)生阻塞。
好的。
這里的前端只是相對于這個流程來說,實際上會用隊列的消費者發(fā)起請求,
實際上前端、路由、后端都在一個局域網(wǎng)下,
打算用workerman 多進程守護,發(fā)起curl請求,因為設計文件傳輸,感覺用http簡單靠譜一點。
十分感謝。
只要不會阻塞就好。如果還是會斷開的話,實在不行這部分就放棄http的方式,自己寫tcp連接。
十分感謝