php排隊
『壹』 php做一個排隊等候的功能
你這個問題歸根結底是想要做一個實時在線人數的功能:
但是http請求是無狀態的,所以你沒有辦法實時知道多少人在線,就是說沒有辦法精確響應用戶把瀏覽器關了,伺服器就能知道並且把把用戶標記為下線
解決辦法:
伺服器里維護一份列表,這個列表記錄了每個用戶的session_id,有效期比如可以設置為30分鍾,在用戶每次請求的時候都刷新下這個有效期,用戶點擊退出時就刪除這個用戶的session_id。
因此統計這個列表裡未過期的sessionid個數就是當前的實時人數
這份表根據你系統的規模,可以是文本,mysql,也可以是memcache redis 都行
存在問題:
用戶只是三十分鍾停留在頁面但是沒有退出的系統把他認為下線了。這個可以通過「心跳包」來解決
用戶關閉瀏覽器但是沒有記為下線,這個就是我上面提到的 http無狀態,這個沒招
要想提高精確性就是減少有效期和心跳包的時間設定的結合,這個看你們的需求
『貳』 在PHP中如何使用消息列隊
在寫入隊列的時候可以規定相應的規則如:
{'處理腳本':'test','data':{'test':'test'},'分組':『1','處理結果':'0'}
這樣就可以通過一個消息隊列來處理整個項目的所以消息任務
把data發送給相遇的腳本返回處理結果,而這個分組可以實現分組多進程並發處理來解決效率問題。
效率問題的結局還可以在守護進程上進行增加,守護進程跟進當前的任務量發起適當的處理進程,處理進程再分發給具體的業務處理腳本!
『叄』 如何讓同一個php文件自動排隊運行
需要一個資源管理的概念。
a.php開始執行的代碼頭里申請使用資源,結束時釋放資源。舉個例子:項目組里只有小王一個會美工,現在小張和小米都需要叫小王幫助做一張同級別需求的圖。這里,小張先找到小王,小王答應了,小王這個資源就先被小張佔了。小米找到小王時,小王則告訴小米,他正在處理小張的需求,讓小米等待。
如果你需要處理的同一個客戶端的請求,可以使用session或者cookie來做資源管理。
如果是要解決多客戶端,因為php沒有application的概念,所以需要使用其他的介質,如:緩存文件,資料庫,內存緩存方案(memcache、redis等)