【发布时间】:2013-07-12 02:08:06
【问题描述】:
背景
用户计算机上的桌面应用程序从调制解调器获取电话号码,并在接到电话后将其发送到 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
- socket_listener.php 24/7 在端口上监听传入的数据包,并将接收到的新电话号码附加到文本文件中
- 411_scraper.php 每 5 秒检查一次文本文件的更新。如果文件版本发生变化,则读取最后一个电话号码
- 运行代码查询411.com并使用电话号码检索数据
所需的解决方案
- socket_listener.php 在端口上侦听包含电话号码的传入数据包
- 使用从 411 检索到的新数据自动更新页面
我一直在看的东西
我看过 node.js、Ratchet (www.socketme.com) 和 Pusher (http://pusher.com/),但它们都超出了我的理解水平。 Pusher 和 Ratchet 看起来很有希望,但我还没有进入它们。
【问题讨论】:
-
也许你可以为你的socket_listener.php创建一个回调?
-
具体是什么问题?为什么不直接在
socket_listener.php中更新该数据库? -
@Brad - 问题是我如何做到这一点,一旦 PHP 收到数据包(电话号码),然后页面自动查询 411 数据库并输出数据而无需经过中间人就像一个文本文件。我一直在做更多的研究,并遇到了 Ajax 长轮询方法。再加上您建议改用数据库
-
[继续] 再加上您使用数据库的建议,我可以用新的电话号码和时间戳更新表,然后每隔几秒轮询一次表。我将为大约 10 家企业提供服务。你相信它会对服务器/cpu造成压力吗?我猜它甚至不应该划伤服务器,但我会进行压力测试以确保。
-
没错。我没有看到问题。你说问题是你不希望 PHP 写入文本文件......我问你为什么首先走这条路?简单地不要写入文本文件并直接进入您的数据库。还是你说你没有数据库?如果是这样,411_scraper.php 是做什么的?您的描述是它读取一个文本文件,但是运行它的是什么?它对这些数据有什么作用?请在您的描述中更完整...就目前而言,您的问题让我很困惑。