2011-10-09 30 views
0

我有两个文件,index.php和callback.php。 Index.php用于在网站上显示数据。 callback.php是一个充当监听器的脚本。 callback.php由服务器调用,并且callback.php中的$ update变量由服务器实时更新。我希望每次更新时都能看到$ update变量的内容。如何在充当监听器的脚本中查看变量的内容:Facebook实时更新

Callback.php:

if ($method == 'GET' && $_GET['hub_mode'] == 'subscribe' && 
     $_GET['hub_verify_token'] == VERIFY_TOKEN) { 
     echo $_GET['hub_challenge']; 

    } else if ($method == 'POST') { 
     $updates = json_decode(file_get_contents("php://input"), true); 
     //I want to see the content of $updates 
     // resend the push notification again. 
     error_log('updates = ' . print_r($updates, true)); 
    } 

我怎样才能做到这一点?请告诉我。如果您有一些示例代码,我将非常感激。

回答

1

我相信你所描述的技术叫做长轮询。

基本上,客户端发送一个ajax请求到服务器,并坐在那里等待响应。在某些事件发生时(这就是像Node这样的SSJS真的很方便),服务器向客户端发送新数据。在收到数据后,客户端立即发送一个新请求并等待下一次更新。

这里是流量:

页面加载:

__________        _________ 
|   |       |   | 
| Client A | ---> Request for Data ---> | Server | 
|__________|       |_________| 

然后呢?悬念:

__________        _________ 
|   |       |   | 
| Client A | .......................... | Server | 
| waiting |       | waiting | 
|__________|       |_________| 

别人更新的内容,您想实时看到:

     __________ 
        |   | 
        | Client B | 
        |__________| 
         | 
         | Sends update to Server 
         |___________________. 
              | 
              V 
__________        _________ 
|   |       |   | 
| client A | ............<------------- | Server | 
| waiting |       | Reacts | 
|__________|       |_________| 
    | 
    | 
    V  
__________        _________ 
|   |       |   | 
| Client A | (No open connection) | Server | 
| Updates |       | Idle... | 
|__________|       |_________| 
    | 
    | 
    V 
___________        _________ 
|   |       |   | 
| Client A |       |   | 
| Reacts to |       | Server | 
| Update | ---> Request for Data ---> |   | 
|___________|       |_________| 

冲洗,重复 这里要记住的一点是,HTTP1.1支持持久连接,这意味着它不会超时,除非你想要。我建议您在服务器端调查NodeJS以触发这些事件。

+0

是的...这似乎有点我正在寻找。我的index.php提供了一些实时数据给服务器,回调url是callback.php。服务器将更改通知发送到callback.php。我想查看存储在$ updates中的更改通知。 – Praveen

+0

当你说服务器端你是指服务器本身还是callback.php文件?我不控制将更改通知发送到callback.php的服务器。 – Praveen

+0

你必须在服务器上有某种事件监听器。由于阻塞I/O,PHP通常不是侦听器的最佳解决方案。例如,如果您希望PHP脚本每秒钟检查数据库以查找来自其他用户的新帖子,则必须使用'sleep(1000)',这会暂停脚本并阻止其他脚本运行。这是NodeJS的主要优点之一。 – AlienWebguy

相关问题