phpsocket.io 写了一个服务端 监听了几个事件 事件都是查询数据库 数据不打 web端定时请求 几十个人访问就卡住了
lievent和 内核都跳优了 难道他这种单进程,不能做耗时操作
可以 strace -p 进程pid 看下进程在干什么。
单进程不适合做耗时操作,比如一个请求查数据库耗时1秒,那么其它请求就会被阻塞等待,也就是这个进程每秒只能处理一个请求。几十个请求一同发过来,进程要卡几十秒。假设说每个查询请求0.1秒就完成,那几十个客户端一起发来请求,进程也要几秒才能处理完,也会后卡住的现象。
解决办法: 耗时的操作可以直接post给tp等mvc框架做,需要推送消息给客户端的时候利用phpsocket.io推送。 推送可以参考web-msg-sender的做法,利用curl与phpsocket.io通讯,让phpsocket.io推送数据。 这样phpsocket.io里没有任何阻塞的逻辑,linux内核优化好,libevent/event扩展装好,单进程上万个客户端都可以应付。
明白了 谢谢 strace -p 的时候那一堆数据 看的我眼花缭乱
phpsocket.io里面使用 手册里面的 如何实现异步任务 这个应该可以 应付吧
可以 strace -p 进程pid 看下进程在干什么。
单进程不适合做耗时操作,比如一个请求查数据库耗时1秒,那么其它请求就会被阻塞等待,也就是这个进程每秒只能处理一个请求。几十个请求一同发过来,进程要卡几十秒。假设说每个查询请求0.1秒就完成,那几十个客户端一起发来请求,进程也要几秒才能处理完,也会后卡住的现象。
解决办法:
耗时的操作可以直接post给tp等mvc框架做,需要推送消息给客户端的时候利用phpsocket.io推送。
推送可以参考web-msg-sender的做法,利用curl与phpsocket.io通讯,让phpsocket.io推送数据。
这样phpsocket.io里没有任何阻塞的逻辑,linux内核优化好,libevent/event扩展装好,单进程上万个客户端都可以应付。
明白了 谢谢 strace -p 的时候那一堆数据 看的我眼花缭乱
phpsocket.io里面使用 手册里面的 如何实现异步任务 这个应该可以 应付吧