2013-05-01 113 views
0

我正在使用PHP(Drupal)編寫的網站上工作。外部網站將與其交互(例如,將數據推入)。基於PHP的網站推送通知

我想要做的是在外部網站推送與他們相關的數據時向用戶發送推送通知。我不想做任何類型的投票,我寧願使用套接字等。

所以一般過程會是這樣的

我真的不能找到你怎麼可以做這樣的事情有什麼好的資源。我查看了node.js,但我不確定它是否是我想要的。我覺得通知服務器將不得不通過套接字與客戶端進行通信 - 但是這看起來好像是一個php套接字與javascript套接字交談,而我所處的每個地方似乎都認爲這是非常困難或不可能的。

有什麼辦法可以達到這個目的?

+0

谷歌發現這個:http://socket.io/ – 2013-05-01 07:05:19

回答

0

我最終找到this

我的申請,我想我會用Ajax的方法有較大的超時。這似乎是最容易和最快的。

0

參見:

如果你這樣做,雖然對像Apache上運行PHP,與連接的客戶端的合理*號的,你很快就會發現你的服務器資源耗盡。我會推薦一種替代解決方案 - 或者像棘輪這樣基於PHP的獨立解決方案,或者使用託管服務,如Pusher(我工作的人)。

*「合理」實際上取決於一些事情。如果你有一個擁有大量內核和內存的服務器,那麼你當然仍然可以處理一個「合理的」(希望這在上下文中更有意義)多個併發請求(持久連接)。但是,如果您使用爲實時Web功能而構建的技術(持有開放式持續連接),那麼您需要擴展的點將大大​​降低 - 在需要升級服務器或負載平衡之前,您將能夠處理更多的同時連接另一臺服務器

Apache是​​根據請求/響應範例構建的。所以,當一個請求進入時,它會爲該請求分配一堆資源。該請求執行(DB查詢,HTML/JSON/XML生成),並以結果進行響應。問題是,如果這個請求被保持開放 - 因爲它需要持續連接 - 那麼「一堆資源」將與該請求保持聯繫。

實時web服務器的構建方式不同。處理傳入請求並保持該連接的位保持儘可能輕 - 只保留很少的資源。然後處理由後臺工作人員處理(確切地說,將依賴於技術架構),這意味着當創建持續連接時,這些連接所使用的資源保持最小。這留下了剩餘資源可供處理。

+0

什麼是「合理」數量的連接客戶端? – 2013-05-02 01:24:11

+0

好問題,我應該澄清。我會更新我的答案。 – leggetter 2013-05-02 08:46:33

1

考慮使用像PubNub這樣的服務。你不需要擔心NodeJS或者websockets。將PubNub插入PHP和你的前端,你就會全部設置好。

下面是教程的摘要版本在這裏找到的文本: http://www.pubnub.com/blog/php-push-api-walkthrough/

JavaScript的PHP的推式API的「Hello World」

enter image description here

這PHP代碼將消息發送到一個JavaScript瀏覽器在'my_test_channel'頻道上收聽。當此PHP代碼執行時,JavaScript瀏覽器將收到PHP數組並顯示「hello!」警報消息。

## Publish Messages To a JavaScript Browser 
$pubnub = new Pubnub('publish_key', 'subscribe_key'); 
$pubnub->publish(array(
'channel' => 'my_test_channel', 
'message' => array('some_text' => 'hello!') 
)); 

上面的JavaScript是完全跨瀏覽器兼容的。該代碼將監聽'my_test_channel'頻道上發佈的消息。收到消息時,JavaScript會驗證消息對象中是否存在'some_text'。如果此屬性存在,則顯示一個警報框!

PUBNUB.subscribe({ channel : 'my_test_channel' }, 
function(message) { 
if ('some_text' in message) { 
alert(message.some_text); 
} 
});