zoukankan      html  css  js  c++  java
  • PHP多进程编程(3):多进程抓取网页的演示

    我们知道,从父进程到子经常的数据传递相对比较容易一些,但是从子进程传递到父进程就比较的困难。

    有很多办法实现进程交互,在php中比较方便的是 管道通信。当然,还可以通过 socket_pair 进行通信。

    首先是服务器为了应对每一个请求要做的事情(发送一个url 序列,url序列用t 分割。而结束标记是 n)

    代码如下:(为每一个url fork 一个线程,然后打开管道 ,读取到的标题写入到管道里面去,主线程一直的在读取管道数据,直到所有的数据读取完毕,最后删除管道)

    在下载到 title 标签后,就停止读取内容,以节省时间。代码如下:

    这里,我只是检测了 三种最常见的编码。其他的代码都很简单,这些代码都是测试用的,如果你要做这样一个服务器,一定要进行优化处理。特别是,要防止一次打开太多的进程,你要做更多的处理。

    很多时候,我们抱怨php 不支持多进程,实际上,php是支持多进程的。当然,没有那么多的进程通信的选项,而多进程的核心就在于进程的通信与同步。在web开发中,这样的多线程基本上是不会使用的,因为有很严重的性能问题。要实现比较简单的多进程,高负载,必须借助其扩展。

  • 相关阅读:
    “您的外卖订单正在由机器人配送中”:探访送货机器人进楼宇
    外媒:比特币大陆将于9月IPO 规模或高达180亿美元
    网站被挂马的处理办法以及预防措施
    【学习】linux环境下nginx文件彻底删除
    【学习】SpringBoot之全局异常处理器
    【学习】SpringBoot之自定义拦截器
    _parameter:解决There is no getter for property named in class java.lang.String
    Window安装Redis并设置为开机启动
    SpringBoot 使用定时任务动态执行任务
    网易云信(创建账号,添加好友,获取好友关系,发送系统消息《推送》,删除好友,修改用户信息)
  • 原文地址:https://www.cnblogs.com/chunguang/p/5578462.html
Copyright © 2011-2022 走看看