欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php评论使用websocket

程序员文章站 2022-03-31 13:01:39
一般评论分这几种模式:1.盖楼模式(例如网易新闻这种的,较为复杂)2.单条新增模式(比如laravel-china社区的评论系统,也是不盖楼模式) 1.单条新增模式比较简单(1.单条模式:不管新增评论还是回复评论都是一条新评论 2.单条引用模式:新增评论是一条新评论,回复评论时下面会显示会显示回复的 ......

一般评论分这几种模式:1.盖楼模式(例如网易新闻这种的,较为复杂)2.单条新增模式(比如laravel-china社区的评论系统,也是不盖楼模式)

  1.单条新增模式比较简单(1.单条模式:不管新增评论还是回复评论都是一条新评论    2.单条引用模式:新增评论是一条新评论,回复评论时下面会显示会显示回复的是哪条评论)

    单条模式:(数据库设计)

    id        (自增i主键,评论id)

    content      (评论内容)

    user_source   (用户来源,微信,微博,app等)

    user_code    (用户标识,app端传来识别用户的)

    user_pic     (用户头像)

    add_time      (添加时间)

    level        (是否置顶)

    其它字段......   

 

    单条引用模式(数据库设计):

    id       (自增主键,评论的id) 

    content    (评论内容)

    add_time   (评论时间)

    r_id      (被回复者的id)

    r_content   (被回复者评论内容)

    r_time    (回复时间)

    level     (回复是否置顶)

    其它字段........(这里我喜欢把回复的评论和被回复评论当作一条评论,在控制器里根据r_id(被回复的评论id)去redis里取数据,如果没有就去查数据库并存入redis设置过期时间,把获得的数据插入数据库,也可以去掉r_开头的字段换为parent_id,通过这个遍历查询去获取)

 

    2.盖楼这种模式目前我会的是通过parent_id来递归查询,如果是第一条被评论的parent_id为0,其余parent_id是被评论的id,但这种方式特别消耗内存

 

 

  从前端获得了评论的数据,我们用websocket进行发送的时候,最好压缩一下评论字段,这样可以节约服务器资源,比如有10000个人在线,其中一人发了一条评论,其余9999个人都得看见,那本来很长的字段压缩后总数据量大小就减少了,

  用websocket发送时可以通过post方式和redis订阅方式发送,我更倾向于redis订阅方式的发送,你可以对评论添加进行日志的管理

   post方式发送要有websocket的服务器地址和要发送的数据,发送的数据中要有一个key值是在websocket中注册过的

    redis订阅方式的发布要先连上redis服务器,也要在websocket上注册过的key,还有要发送的数据

  评论发送websocket时也分为先审后发和先发后审,先审后发比较简单,有数据先进redis队列,然后通过Linux的crontab程序刷进数据库,后台要操作哪条就发哪条的websocket

  先发后审的话有数据也是先进redis队列,评论并发多的话就要有两种队列,发websocket的队列和不发websocket的队列,然后通过Linux的crontab程序刷进数据库

  crontab是最低每分钟执行一次,你可以自己写一个php文件每秒执行一次,php文件里就写个for循环执行,但要在文件最前部加上这么一段代码

      

  $cc = exec("ps -ef |grep '" . __FILE__ . "' | grep -v 'grep' | wc -l");
  if ($cc > 10) {
exit("program is running……");
  }
  这是防止某个程序执行太多,让服务器崩溃,本人菜鸟级别,如果以上有什么不对的欢迎指出来