资讯专栏INFORMATION COLUMN

PHP socket初探 --- 含着泪也要磕完libevent(三)

suxier / 3211人阅读

摘要:无数个专业送给啦啦啦啦,开始码注意,将监听设置为非阻塞模式这里值得注意,我们声明两个数组用来保存事件和连接欢迎来到聊天室发言注意遵守当地法律法规使用全局的和非阻塞模式下,注意的写法会稍微特殊一些。

原文地址:https://t.ti-node.com/thread/...

这段时间相比大家也看到了,本人离职了,一是在家偷懒实在懒得动手,二是好不容易想写点儿时间全部砸到数据结构和算法那里了。

今儿回过头来,继续这里的文章。那句话是怎么说的:

自己选择的课题,含着泪也得磕完!”(图文无关,详情点击这里)。

其实在上一篇libevent文章中(《PHP socket初探 --- 硬着头皮继续libevent(二)》),如果你总结能力很好的话,可以观察出来我们尝试利用libevent做了至少两件事情:

毫秒级别定时器

信号监听工具

大家都是码php的,也喜欢把自己说的洋气点儿:“ 我是写服务器的 ”。所以,今天的第一个案例就是拿libevent来构建一个简单粗暴的http服务器:

样做
  if( ( $connect_socket = socket_accept( $listen_socket ) ) != false){
    echo "有新的客户端:".intval( $connect_socket ).PHP_EOL;
    $msg = "HTTP/1.0 200 OK
Content-Length: 2

Hi";
    socket_write( $connect_socket, $msg, strlen( $msg ) );
    socket_close( $connect_socket );
  }
}, $listen_socket );
$event->add();
$event_base->loop();

将代码保存为test.php,然后php http.php运行起来。再开一个终端,使用curl的GET方式去请求服务器,效果如下:

这是一个非常非常简单地不能再简单的http demo了,对于一个完整的http服务器而言,他还差比较完整的http协议的实现、多核CPU的利用等等。这些,我们会放到后面继续深入的文章中开始细化丰富。

还记得我们使用select系统调用实现了一个粗暴的在线聊天室,select这种业余的都敢出来混个聊天室,专业的绝对不能怂。

无数个专业???????????????送给libevent!

啦啦啦啦,开始码:

 $conn_item ){
        if( $conn != $conn_item ){
          $msg = intval( $conn )."说 : ".$buffer;
          socket_write( $conn_item, $msg, strlen( $msg ) );
        }   
      }   
    }, $conn );
    $event->add();
    // 此处值得注意,我们需要将事件本身存储到全局数组中,如果不保存,连接会话会丢失,也就是说服务端和客户端将无法保持持久会话
    $event_arr[ intval( $conn ) ] = $event;
  }
}, $fd );
$event->add();
$event_base->loop();

将代码保存为server.php,然后php server.php运行,再打开其他三个终端使用telnet连接上聊天室,运行效果如下所示:

尝试放一张动态图试试,看看行不行,自己制作的gif都特别大,不知道带宽够不够。

截止到这篇为止,死磕Libevent系列的大体核心三把斧就算是抡完了,弄完这些,你在遇到这些代码的时候,就应该不会像下面这个样子了:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29647.html

相关文章

  • PHP socket初探 --- 硬着头皮继续libevent(二)

    摘要:类就是产生各种不同类型事件的产出器,比如定时器事件读写事件等等,为了提升民族荣誉感,我们将这些各种事件比作各种战斗机比如歼歼和歼。类就相对容易介入了,这玩意显然就是一个航空母舰了,为了提升民族荣誉感,我们就把类当作是辽宁舰。 [原文地址:https://blog.ti-node.com/blog...] 实际上php.net上是有event扩展的使用说明手册,但是呢,对于初学者来说却并...

    jokester 评论0 收藏0
  • PHP socket初探 --- 颤颤抖抖开篇libevent(一)

    摘要:原文地址正如标题所言,颤颤抖抖开篇。于是只能是你自己,把单子上的个快递逐次和收到的对比一遍,然后对比完毕后再把这个单子给了阿梅,然后阿梅继续等。剃光头前的阿梅,就是,不敢正眼看老板娘一眼。剃光头后的阿梅,就是,可徒手接魔鬼队的死亡之球。 [原文地址:https://blog.ti-node.com/blog...] 正如标题所言,颤颤抖抖开篇epoll。颤颤抖抖的原因大概也就是以前几乎...

    levinit 评论0 收藏0
  • 小程序生命周期——小程序探索

    摘要:运行机制小程序启动会有两种情况,一种是冷启动,一种是热启动。建议小程序在必要时使用监听内存告警事件,进行必要的内存清理。 前言 以小程序为切入点,深入理解总结方方面面的知识点,做成系列文章,希望能得到大神的指点和帮助新人入门,承上启下才是好程序猿由于是系列第一篇文章,紧跟着的是一大段废话,只关心技术的可以跳过 转眼半年又要过去了,意味着来新公司快半年了,离上次写文章也半年了,浑浑噩噩...

    Caizhenhao 评论0 收藏0
  • PHP socket初探 --- 关于IO的一些枯燥理论

    摘要:原文地址要想更好了解编程,有一个不可绕过的环节就是在中,一切皆文件实际上要文件干啥不就是读写么所以,这句话本质就是才是王道用的打开文件关闭文件读读写写,这叫本地文件在编程中,本质就是网络所以,在开始进一步的编程前,我们必须先从概念上认识好 [原文地址:https://blog.ti-node.com/blog...] 要想更好了解socket编程,有一个不可绕过的环节就是IO.在Lin...

    sf190404 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<