监听了几个耗时事件,几十个人访问就卡住了

mazhaozi

phpsocket.io 写了一个服务端 监听了几个事件
事件都是查询数据库 数据不打
web端定时请求
几十个人访问就卡住了

lievent和 内核都跳优了
难道他这种单进程,不能做耗时操作

2292 1 0
1个回答

walkor

可以 strace -p 进程pid 看下进程在干什么。

单进程不适合做耗时操作,比如一个请求查数据库耗时1秒,那么其它请求就会被阻塞等待,也就是这个进程每秒只能处理一个请求。几十个请求一同发过来,进程要卡几十秒。假设说每个查询请求0.1秒就完成,那几十个客户端一起发来请求,进程也要几秒才能处理完,也会后卡住的现象。

解决办法:
耗时的操作可以直接post给tp等mvc框架做,需要推送消息给客户端的时候利用phpsocket.io推送。
推送可以参考web-msg-sender的做法,利用curl与phpsocket.io通讯,让phpsocket.io推送数据。
这样phpsocket.io里没有任何阻塞的逻辑,linux内核优化好,libevent/event扩展装好,单进程上万个客户端都可以应付。

  • mazhaozi 2017-04-13

    明白了 谢谢 strace -p 的时候那一堆数据 看的我眼花缭乱

  • mazhaozi 2017-04-13

    phpsocket.io里面使用 手册里面的 如何实现异步任务 这个应该可以 应付吧

年代过于久远,无法发表回答
🔝