簡體   English   中英

套接字連接只需要一個線程嗎?

[英]Do socket connections only need one thread?

據我所知,Apache不適合提供長輪詢請求,因為每次進入Apache的請求都將使用一個工作線程,直到請求完成,這對於長輪詢/ COMET請求可能需要很長時間。

但是套接字連接怎么樣呢。 在PHP網站上,我看到一個“用PHP編寫的真正有效的簡單多客戶端服務器” 的例子

我的問題:這樣的套接字服務器是否只對所有已建立的連接使用一個工作線程 反之亦然:是否有可能只使用一個工作線程編寫一個同時連接到多個套接字服務器的PHP客戶端?

看看phpDaemon 它設計用於長池應用程序和類似的。 但我建議你盡可能使用node.js來完成這些任務。

這是輪詢循環樣式服務器的一個示例 - 請參閱傳遞給socket_recv()MSG_DONTWAIT常量? 從本質上講,它有一個循環遍歷所有打開套接字的線程,以查看它們中是否有任何數據等待。 如果套接字沒有數據等待,它將繼續移動到下一個並檢查它。

但是,請注意,使用這樣的服務器,您無法在TCP基礎之外獲得良好的協議處理 - 您必須擔心自己解析原始數據流。

所有連接都是通過套接字完成的。 主要區別在於I / O是否阻塞。 選擇從套接字接收阻塞將導致線程阻塞,但使用MSG_DONTWAIT將立即完成。

Apache為您提供了一些選擇。 您可以分叉並發連接(mpm-prefork),為每個連接使用不同的線程(mpm-worker),或者使用非阻塞I / O(mpm-event)的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM