2012-08-17 170 views
1

我開發了一個類似聊天的應用程序,我的服務器應該用PHP編寫,客戶端應該是被動的,只需要監聽數據。連接消息接收和消息發送腳本

現在,我要開始與具有兩個腳本: send.php 和 server.php

send.php提供REST API通過GET接口發送消息到另一個客戶端。

server.php應該是一個TCP服務器接受來自客戶端的連接,爲了通過套接字發送數據並且目前基於http://php.net/manual/en/sockets.examples.php,所以現在客戶端只連接到他並且他發回一些測試字符串。

我的問題是,我應該以某種方式連接send.php和server.php,以便當通過send.php server.php推送消息實際上會發送它。

我該怎麼做?

我猜想的一個選擇是將推送的消息存儲在服務器存儲中並檢查server.php中的新消息,但我擔心這太耗費資源。

+0

PHP真的不是這樣做的正確語言。你是如何連接到PHP的?有辦法在PHP中完成它,但它們很混亂,有許多語言/框架可以更有效地實現這一點--Java和Node.js立刻就會涌現出來。 – DaveRandom 2012-08-23 13:09:11

+0

@DaveRandom,它只是基於REST的服務而已,並且與編寫「$ _GET ['name']」相比,您無法獲得更多的便利。但它仍然有這個插座的小部分。我同意,如果主要是套接字,我會用Java/C#去。 – Alehar 2012-08-24 05:19:39

回答

0

解決方法1.

我解決我的問題在某種程度上,我原本認爲,這意味着我做server.php活躍,因此會檢查新的信息每秒鐘:

function getNewMessages() 
{ 
    $arrOfMessages = array(); 
    $selectQuery = "SELECT * FROM messages WHERE unread=1"; 
    $result = mysql_query($selectQuery); 
    return $arrOfMessages; 
} 

if(count($newMessages) > 0) 
{ ... } 

意識到製作在一秒鐘內選擇一次並不是什麼大事。

解決方案2.

另一種方法我想應該是這樣的:

  • server.php接受有關客戶端IP數據並將其綁定到用戶會話;
  • 將其存儲在數據庫中; send.php與客戶端建立新的連接,並且 向它發送消息。

這種方式的消息會在發送方客戶端通過REST接口'發送'後立即發送給客戶端,不會有檢查循環在任何地方運行。你甚至可以讓你的server.php(標題在這個解決方案btw中誤導)通過REST接口接受IP,所以不需要額外的TCP/UDP連接。

解決方案3.

許多客戶(如iOS版)這天有推送通知系統,如果客戶沒有得到每天的郵件太多,要做到這一點,最好的辦法就是要救他們是通過推送通知。這樣你就不必擁有低級網絡連接,而REST接口就足夠了。