2013-07-12 62 views
4

背景PHP套接字在實時

在用戶的計算機上的桌面應用程序從調制解調器獲得的電話號碼,並把它發送到一個PHP腳本一次呼叫中收到。目前,我可以通過PHP在指定的端口上接收數據/數據包。然後我有一個連接到411數據庫的刮板,並返回指定電話號碼的地址。

問題

我檢索通過插座在PHP中的電話號碼後,我怎麼能自動更新爲新的電話號碼的411解析器頁?

代碼

socket_listener.php

set_time_limit(0); 

$address = "127.0.0.1"; 
$port = 10629; 

// create socket and bind with listener event 

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
socket_bind($socket, $address, $port); 
socket_listen($socket); 

do { 
    $accept = socket_accept($socket); 
    $read = socket_read($accept, 1024) or die("Could not read input\n"); 

    // parse phone number 
    $phone = substr($read, 19, 15);  

    $file = fopen("phone_numbers.txt", "a"); 
    fwrite($file, $phone . "\r\n"); 
    fclose($file); 

} while (true); 

phone_numbers.txt

(425) 555-1212 
(123) 456-7890 

當前的解決方案

我目前的解決方案很古怪。

modem -> desktop application -> socket_listener.php -> data.txt -> 411_scraper.php 
  1. socket_listener.php偵聽的端口接收報文24/7,並追加新的電話號碼接收到一個文本文件
  2. 411_scraper.php每5檢查更新的文本文件秒。如果文件版本發生變化,那麼它會讀取最後的電話號碼
  3. 運行代碼來查詢411.com,並使用電話號碼

期望解

  1. socket_listener.php檢索數據在端口上偵聽包含電話號碼的傳入數據包
  2. 頁面自動從411檢索新數據進行更新

事情我一直在尋找

我看過的node.js,棘輪(www.socketme.com)和推杆(http://pusher.com/),但他們均高於我的理解程度。推杆和棘輪似乎很有前途,但我還沒有跳進他們呢。

+0

也許你可以爲你的socket_listener.php創建一個回調? – Rainulf

+1

具體有什麼問題?爲什麼不直接在'socket_listener.php'中更新數據庫呢? – Brad

+0

@Brad - 問題是如何讓PHP一旦收到數據包(電話號碼),頁面自動查詢411數據庫並輸出數據,而不必像文本文件那樣經過中間人。我一直在做更多的研究,並採用了Ajax長輪詢方法。加上你的建議,使用數據庫 – Puiu

回答

-2

我會使用ajax或沿着這些線的東西。 PHP不是真正的事情。當您導航到使用PHP的網站時,代碼在頁面呈現之前執行。它正在處理服務器計算機上的代碼,並將結果作爲可以發送給請求客戶端的字符串提供給您。

你將永久保存數據。一旦php腳本執行完畢,數據就會被執行。除非你使用會話。