簡體   English   中英

Websockets和PHP

[英]Websockets & PHP

我開始考慮將websockets作為替代我正在調試的新構建PHP應用程序中的長時間輪詢的解決方案。

我有幾個問題,我想知道是否有人可以幫助我。

  1. Nodejs服務器可以調用PHP嗎?如果不這樣做,與連接Apache一樣,它也遭受同樣的缺點嗎? 我們都知道nodejs是非阻塞的,而Apache等不是,但是如果Nodejs只是在它自己的過程中調用PHP服務器,那不會以類似的方式造成瓶頸嗎?
  2. PHP和websockets很好匹配嗎?
  3. 除了socketio以外,還有什么不錯的js庫,這些庫顯然僅適用於Node.js嗎?
  4. 有沒有人找到使用websockets和PHP后端的優秀教程,也許使用諸如Ratchet PHP庫之類的東西來幫助我上路呢?

思想將不勝感激。

請原諒我對您問題的解釋。

1: Node.js可以調用PHP,並且不會有與Apache相同的缺點嗎?

調用一次運行的PHP腳本將具有與調用網頁相同的一般缺點,只是要刪除額外的處理層。 Apache或任何Web服務器本身都是這么薄的一層,雖然您可以節省一些時間,但是節省的資金微不足道。

如果出於某種原因,PHP比Node.js在收集客戶端數據方面更有效,那么將PHP包含在應用程序中可能是明智的。

2: PHP和WebSockets是否很好匹配?

傳統的PHP腳本通常旨在每個請求運行一次。 絕大多數PHP開發人員都不熟悉事件驅動的開發,並且PHP本身(尚未)不支持異步處理。

PHP是一種快速,成熟的腳本語言,盡管有很多缺點和缺點,但它只會變得越來越快。 (有人說它的弱類型是一個缺點。其他人說它的類型不夠弱是一個缺點。)

也就是說,任何語言實現WebSocket所需的最低要求是能夠打開基本TCP端口並偵聽請求。 對於PHP,它是作為C套接字庫的一個薄包裝而實現的,並且還有其他可用的擴展和框架,它們也可以改變使用PHP在TCP套接字中工作的感覺。

PHP的垃圾收集器也已經成熟。 內存泄漏要么是由於對內存空間的完全無視(我在看您,Zend Framework),要么是因為認為自己很聰明或想要證明擊敗它很容易的開發人員故意破壞垃圾收集系統。 GC。 (劇透:如果您知道詳細信息,那么每種語言都很容易!)

在PHP中設置守護程序(長時間運行的后台進程)非常有可能並且非常容易。 甚至有可能使其行為良好,以正常重啟並將其連接移交給同一腳本的新版本,甚至是運行不同PHP版本的同一服務器上的同一腳本,盡管這超出了范圍。一點點。

至於是否合適, 完全取決於開發人員 您是否願意,有能力並且很高興與PHP一起編寫WebSockets服務器或使用現有服務器之一? 是? 然后, 非常適合PHP和WebSockets。

3: WebSockets的JS庫

老實說,我還沒有研究過它們。

4: 使用PHP和Websockets的教程

我個人很喜歡本教程: http : //www.phpbuilder.com/articles/application-architecture/optimization/creating-real-time-applications-with-php-and-websockets.html

盡管我擁有很好的權威,但是該教程的詳細信息很快將針對該特定WebSockets服務器而過時。 (不過,該服務器仍將有一個主動維護的舊版分支。)

如果鏈接腐爛:

使用PHP-Websockets服務器(將在Github上提供,將很快歸位),擴展基本WebSocketServer抽象類並實現抽象方法process()connected()closed()

但是,在上面的鏈接上有很多更好的信息,因此只要存在該鏈接,請遵循它。

  1. 如果您使用apache,它將遇到相同的瓶頸。 可以通過使用其他Web服務器(例如lighthttpdnginx)來補救。 您甚至根本不需要節點。
  2. PHP沒有像樣的共享內存,這使WebSockets irrelevent的最大優勢。 如果您不希望用戶之間進行交互 ,它應該足夠體面 ,但是即使那樣,我也不得不對PHP的使用不滿意。 PHP在很多方面都很有用,但是實時通信不是其中之一。
  3. 您可能想看看https://github.com/einaros/ws
  4. PHP不是一個好的后端。 任何具有執行模型的應用程序,例如Node.NETC / C ++Java,都可以在其自己的沙箱中輕松運行。 PHP適用於短期運行的執行,例如實際的網站甚至Web服務,但不適用於實時連接。

暫無
暫無

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

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