资讯专栏INFORMATION COLUMN

php如何实现基于事件驱动的网络编程

Caizhenhao / 1954人阅读

摘要:如何实现基于事件驱动的网络编程场景当客户端发送数据到服务端,服务端返回相同信息。保持连接说明接下来的所有代码仅用于简单的小生产环境需要考虑代码的严谨性。但是使用进程的方式不好,很不好。如果万个连接,岂不是要万个进程例子四基于的实现很完美

php 如何实现基于事件驱动的网络编程 场景

当客户端发送数据到服务端,服务端返回相同信息。

保持连接

说明
接下来的所有代码仅用于简单的小demo
生产环境需要考虑代码的严谨性。

例子一

简单的接受数据并返回

$ telnet 0.0.0.0 8000
Trying 0.0.0.0...
Connected to 0.0.0.0.
Escape character is "^]".
hello //客户端输入
hello //这个是服务端回显的

Connection closed by foreign host.

上面的例子中,服务端在接收到客户端数据后会返回相同信息,然后连接会被关闭。无法保持连接。?。

例子二
$socket = stream_socket_server("tcp://0.0.0.0:8000");
while($conn = stream_socket_accept($socket)){
    while($info = fread($conn,1024)){
        fwrite($conn,$info);
    }
}

上面的例子
简单的接受数据并返回
保持运行
缺点是同时只能处理一个连接!!!!!?

例子三
$socket = stream_socket_server("tcp://0.0.0.0:8000");
while($conn = stream_socket_accept($socket)){
    if(pcntl_fork()){
        while($info = fread($conn,1024)){
            fwrite($conn,$info);
        }
    }
}

这里实际上fork了n个子进程去处理n个请求。
但是使用fork进程的方式不好,很不好。
如果10万个连接,岂不是要10万个进程???oh,no!!

例子四

基于libevent的实现,很完美!!!?

0){
            fwrite($conn,$info);
        }
    });
    event_base_set($event,$base);
    event_add($event);
    $events[] = $event;
});
event_base_set($event,$base);
event_add($event);
event_base_loop($base);

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

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

相关文章

  • [gist]为什么事件驱动服务器这么火

    摘要:两个事件驱动模型服务器平均每秒处理的请求数为服务器的一倍,而内存降低了一半。事件驱动模型的出现,是为了解决传统服务器与网络工作负载的需求的不匹配,实现高度可伸缩服务器,并降低内存开销。 from http://oyanglul.us 本文基本上这为两篇文章的翻译和整合 -...

    fsmStudy 评论0 收藏0
  • Laravel最佳实践--事件驱动编程

    摘要:事件驱动编程是图形用户界面和其他应用程序例如应用程序中使用的主要范例,用于执行某些操作来响应用户输入。我们来看一下事件驱动编程带来的收益。现在让我们看看采用事件驱动编程方法如何实现上述相同的功能。 在这篇文章中我们将了解到什么是事件驱动编程以及在Laravel中如何开始构建一个事件驱动应用,同时我们还将看到如何通过事件驱动编程来对应用程序的逻辑进行解耦。 在开始之前,先说明一下这篇文章...

    Drummor 评论0 收藏0
  • polarphp:一个新 PHP 语言运行时环境

    摘要:项目介绍是一个全新的语言的运行时环境,基于目前最新的进行打造,支持最新的语言规范,同时提供了自己的运行时标准库。同样也在的基础上进行打造,实现了一个除开发之外的一个全新的运行环境。发布核心虚拟机的镜像。整合运行时框架。 showImg(https://segmentfault.com/img/bVbnQXK); polarphp 项目介绍 polarphp是一个全新的PHP语言的运行时...

    宋华 评论0 收藏0
  • 什么是Node.js

    Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹。从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定。InfoQ一直在关注Node.js的发展,在今年的两次Qcon大会(北京站和杭州站)都有专门的讲座。为了更好地促进Node.j...

    CrazyCodes 评论0 收藏0
  • MongoDB 资源、库、工具、应用程序精选列表中文版

    摘要:推荐阅读资源库工具应用程序精选列表中文版有哪些鲜为人知,但是很有意思的网站一份攻城狮笔记每天搜集上优秀的项目一些有趣的民间故事超好用的谷歌浏览器油猴插件合集目录资源文档文章图书会谈教程更多库工具管理数据部署桌面发展监控应用资源文档介绍文档教 推荐阅读 MongoDB 资源、库、工具、应用程序精选列表中文版 有哪些鲜为人知,但是很有意思的网站? 一份攻城狮笔记 每天搜集 Github ...

    e10101 评论0 收藏0

发表评论

0条评论

Caizhenhao

|高级讲师

TA的文章

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