好的,這裏的情況。比方說,我有一個應該等待某些信息可用的PHP腳本,並且我認爲這將是一個很好的解決方案,如果我可以製作此腳本塊而不是忙碌循環,直到該信息可用。信息本身將由另一個php腳本實例提供。並且可以說我希望X個這樣的請求阻塞,直到這個腳本的這個實例傳遞這個信息。 我想我可以使用命名管道,讀者進程將阻止等待管道寫入,並且作者將通過管道或其他方式提供所需的信息,並立即解鎖所有讀者。 我找到了posix_mkfifo,但它不能在Windows上工作,是否有任何其他方式來做到這一點,可以在Windows和* nix上工作。 或者也許有一些方法可以讓一堆請求被阻止,並且另一個請求是在他們的時間「設置它們自由」。 我真的不想訴諸繁忙的循環,我想不使用1秒的延遲和sutch來節省CPU。PHP在窗口上命名管道
2
A
回答
2
如果您有套接字擴展可用(或stream_socket_server()
),您可以在腳本中爲其他腳本提供信息創建套接字服務器 - 讓我們將該腳本稱爲「主」。然後,您可以將所有要阻止的腳本 - 「奴隸」 - 對本地主機執行fsockopen()
,然後將其設置爲使得fgets()
,fwrite()
等會阻塞,直到數據通過這些套接字可用。
這不是最有效的方法,因爲您必須將IPC分配給TCP堆棧,但是如果您希望它在Windoze上工作,則不能使用* nix域套接字,所以這就是您堅持的。
我能想到的唯一可以做的事情是涉及臨時文件和flock()
,因爲默認情況下它會阻塞,直到它可以獲得鎖定。這可能是最便攜的選擇,因爲flock()
的行爲自遠古以來一直都是相同的,但它也可能不會(也可能不會)在作爲ISAPI模塊運行的PHP實例上工作(請參閱PHP manual)。
相關問題
- 1. 窗口輪詢或在命名管道上選擇
- 2. 命名管道端口號
- 3. 在Windows上命名管道
- 4. Linux上的MySQL,PHP和命名管道
- 5. 在C++和php中命名管道
- 6. mod_fcgid窗口命名管道第二個和後續請求
- 7. 我可以在WCF命名管道上傳遞COM接口嗎?
- 8. 在命名管道(fifo)上調用LaTeX?
- 9. 在XP上爲命名管道開發
- 10. 在Windows/Mac/Linux上的命名管道?
- 11. 在命名管道上選擇
- 12. 在C命名管道上超時#
- 13. 使用javascript管理命名窗口
- 14. 命名管道在c
- 15. 命名管道掛在讀
- 16. 命名管道IPC
- 17. 從命名管道
- 18. 命名管道Matlab
- 19. 管道ffmpeg輸出到命名管道
- 20. 窗口窗口管理器的名稱
- 21. 視窗CMD泊塢窗命令管道
- 22. 命名管道問題
- 23. IPC安全命名管道
- 24. NSIS中的命名管道
- 25. Qt IPC - 命名管道
- 26. Powershell命名管道安全?
- 27. 命名管道的安全
- 28. 單向命名管道
- 29. WCF命名管道2009年
- 30. unix中的命名管道
你的返回鍵發生了什麼?它是否因爲不需要而離開? :-P – DaveRandom
你已經告訴我們你認爲問題的解決方案是什麼,但是如果你告訴我們問題可能會有更好的方法。 – 2011-08-18 23:43:06