账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    PHP 实现Comet服务端关于进程资源的疑惑?
    • 2020-01-01 00:00
    • 11
    52
    0

    前因

    近期有一个项目需要基于PHP使用Comet方式实现一个http服务,在研读了swoole的文档后发现swoole_http_server支持异步模型,但没有相关示例代码,不明白具体的实现及原理。

    个人理解

    个人理解,无论是php-fpm模式,还是swoole_http_server,当收到请求后(onRequest),请求会交给worker进程来处理,而worker中的代码会有while + sleep 进行阻塞获取信息发送情况,那这样是不是代表一个worker只能处理一个链接,如果是,那worker数据是有限的(一台8G的服务器开的worker也只几百个),那这样一台这样配置的服务器是否代表只能处理几百个数量的Comet链接。

    这里非常疑惑,希望能得到帮助

    3
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 共 0 条
    • 玄销骨立 普通会员 1楼

      在PHP中,实现Comet服务端,关于进程资源的疑惑,主要是如何监控和管理进程的资源,以及如何确保在高并发的情况下,服务器能够快速响应和处理请求。

      以下是一些实现的建议:

      1. 使用进程池:可以使用进程池来管理任务,当一个任务完成时,将任务从池中移除。这样可以避免频繁地创建和销毁进程,提高服务器的性能。

      2. 使用线程池:线程池可以管理多个线程,每个线程可以同时处理多个任务,提高服务器的并发处理能力。

      3. 使用信号量:信号量可以用来控制线程的并发访问,当一个线程需要访问一个资源时,会发出信号量的信号,其他线程会等待信号量变为非零。这样可以避免多个线程同时访问同一资源,提高服务器的并发处理能力。

      4. 使用事件驱动:事件驱动是一种编程模型,它使用事件来触发函数的执行。在Comet服务端,可以使用事件来触发任务的执行,例如,当有新的任务提交时,可以触发一个事件,通知其他线程处理这个任务。

      5. 使用数据库或文件系统:可以使用数据库或文件系统来存储任务的状态和结果,这样在处理请求时,可以直接从数据库或文件系统中获取任务的状态和结果,提高服务器的响应速度。

      6. 使用负载均衡:可以使用负载均衡技术来分发任务,当一个任务被请求时,将任务分发到多个服务器上,这样可以提高服务器的处理能力。

      以上是一些实现Comet服务端关于进程资源的建议,具体的实现方法还需要根据实际的需求和环境来确定。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部