sxbxjhwm 最近的时间轴更新
sxbxjhwm

sxbxjhwm

V2EX 第 54121 号会员,加入于 2014-01-13 14:45:08 +08:00
sxbxjhwm 最近回复了
@learningman IDC,服务器上架
弱智老板又提了一个不切实际的需求,屁都不懂的产品经理还在那一本正经分析怎么做的时候 —— 不开心
(我司老板新需求:机房配好以后可以实现系统自动扫描网络,把全部服务器添加进系统里

老板没来催进度没提新需求,和同事一起骂老板 —— 开心
@jfdnet 美亚买的希捷中国能保么,西数已经明确不能转保了
149 天前
回复了 aptupdate 创建的主题 宽带症候群 上海地区有没有便宜的宽带推荐
http://www.189.cn/sh/support/tariff/package/114340.html 100/20,39 一个月,100 安装费算上 568 首年 468 续费,未发现需要缴纳押金,可能需要去直营营业厅(比如西区的江苏路营业厅)办理
https://emall.sh.189.cn/shop/html/30010004/100612.html 100/20,360 一年,200 安装费算上 560 首年 360 续费,押金 200,是从原 20/4 的天天宽带 http://www.189.cn/sh/support/tariff/package/109892.html 升级而来的
https://kdslife.com/t_10584935_0_5.html 宽带山这个贴也可参考
164 天前
回复了 pytth 创建的主题 PHP PHP 查询符合条件的数组问题
@sun2920989 我的例子并没有用到多个 curl_multi_init 的实例,curl_multi_init 返回的是一个栈,你就把它当成一个队列,所有 curl_multi_exec 都在复用这个栈,如果你有需求大可以多创建几个队列,但这样显然没有意义。
@sun2920989 我其实有一点不理解,既然是同步的 fpm,为什么不等到获取数据后统一再处理呢,效率上没差的
@sun2920989 之前做过一个 cli 的爬虫,当时是用 swoole 解决的。做法就是专门起一个负责 task 的进程,用 \Swoole\Server 监听一个 sock 文件,具体文档 https://wiki.swoole.com/#/consts?id=socket-%e7%b1%bb%e5%9e%8b 。做的时候有些偷懒没有用 redis,而是直接用 \Swoole\Table 做基础的共享数据存储,sock 负责队列控制。虽然用 swoole 实现在语法上很好看,用起来却比 curl_multi_exec 要麻烦得多,后续再也没有用过这个方案,在这边讨论这个方案稍微有点超纲,算是之前踩过的坑提醒一下,附一个当时写的部分源码:

```php
protected function execute(Input $input, Output $output)
{
/**
* $initDataTable 基础配置表,用于实例化爬虫类
* |------------------------------------|
* | key | value |
* |------------------------------------|
* | service | service |
* | baseUrl | https:// |
* | cookieJar | json_encode(cookieJar) |
* |------------------------------------|
*/
$initDataTable = new \Swoole\Table(4);
$initDataTable->column('value', \Swoole\Table::TYPE_STRING, 512);
$initDataTable->create();

/**
* $acquiredListTable 记录已由 getList 方法执行过的操作
* |------------------------------|
* | key | value |
* |------------------------------|
* | getDatacenters | 0 |
* | getIpsGroupList | 0 |
* | getIpsList | 0 |
* | getSwitchList | 0 |
* | getHardwareModelList | 0 |
* | getPurchaseList | 0 |
* | getServerList | 0 |
* | getHardwareList | 0 |
* |------------------------------|
*/
$acquiredListTable = new \Swoole\Table(16);
$acquiredListTable->column('count', \Swoole\Table::TYPE_INT, 1);
$acquiredListTable->create();

$workingAtomic = new \Swoole\Atomic();
$successedAtomic = new \Swoole\Atomic();
$failedAtomic = new \Swoole\Atomic();

$serv = new \Swoole\Server(Env::get('runtime_path') . 'task.sock', 0, SWOOLE_PROCESS, SWOOLE_SOCK_UNIX_STREAM);
$serv->table = ['initData' => $initDataTable, 'acquiredList' => $acquiredListTable];
$serv->atomic = ['working' => $workingAtomic, 'successed' => $successedAtomic, 'failed' => $failedAtomic];

$serv->set(array('task_worker_num' => 15));

$serv->on('receive', function($serv, $fd, $from_id, $data) use ($output) {
$this->receive($serv, $fd, $from_id, $data, $output);
});

$serv->on('task', function ($serv, $task_id, $from_id, $data) use ($output) {
$this->task($serv, $task_id, $from_id, $data, $output);
});

$serv->on('finish', function ($serv, $task_id, $data) use ($output) {
$this->finish($serv, $task_id, $data, $output);
});

$serv->start();
}
```
关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3286 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 10:07 · PVG 18:07 · LAX 03:07 · JFK 06:07
♥ Do have faith in what you're doing.