首先谢谢站长提供了如此优秀方便的通信框架,非常感谢您的无私分享精神!由衷的为国产能有如此优秀的php框架感到骄傲。
最近在做一个项目,我刚好看到了workerman,想请教下,使用哪种搭配更合理
项目是一个类似主播需求的群聊应用,有多聊天室共同存在,服务器会有很多信息推送给各个房间,用户交互非常频繁! 不记录历史消息,新用户进入会读取最近10条聊天记录。 有群聊、表情功能,没有好友,传输文件,以及视频,音频等需求! 预计同时在线人数 2000-5000人
详细的看了下,LayChat 感觉太重了点,美丽播视频直播系统 和需求不太符合,
想自己搭建一套,预备使用
PHPSocket.IO 通信 + redis存储聊天、房间数据 + thinkphp 来搭建,心里有点没底,所以想问下大家,我这个搭配有没有啥问题? 谢谢大家了。。
5000人在线,用单进程workerman直接做就好啦,最近10条消息也不用存redis,直接在workerman里弄个全局数组存一下就好了,性能棒棒滴。
还有thinkphp也用不到
大侠,如果聊天信息非常多,全局数组靠谱么。。。而且也不好搞啊,,比如我有30个聊天室和各种群,您确定数组就能搞定么。。。。。。
我觉得没问题啊,假设你有1000个群组,每个存最近10条消息,每条消息平均100个汉字,每个汉字3字节。
那就是 100010100*3 字节=3000000字节=3M的数据,毫无压力啊
你这种想法是错的,内容本身只占3M,但维护内容的数据结构也要额外占内存的。当你把一个 $str 变量中的字符串增加了 3000000字节,那么内存增加 3M 这个正确,但很多条消息,会散在数据的不同键值中,而且可能会有额外的结构来维护关系,消耗的内存远大于3M。
顺便追问下,workerman-chat 大量使用了session来保存用户状态,这样简单是简单了,但是会不会导致内存之类的消耗得很夸张。。。
session里不存很大的数据就没事吧,每个session存个几M数据,那肯定有问题。
存个几K没啥事,2000*5k才10M内存。