网站消息实时推送与缓存处理
程序员文章站
2022-03-25 09:12:25
...
一:在rails5中推出了ActionCable来实现消息的websoket推送
参考链接
https://ruby-china.org/topics/28935
https://ruby-china.org/topics/30494
https://ruby-china.org/topics/28480
二:在某些使用场景下页可以考虑js定时轮询刷新的方式去做。(比如强制点击处理,消息才会不再弹出。)
下边分享一段,用redis缓存消息记录,当点击才会取消显示,但只有真正处理才会改变状态的代码。
参考链接
https://ruby-china.org/topics/28935
https://ruby-china.org/topics/30494
https://ruby-china.org/topics/28480
二:在某些使用场景下页可以考虑js定时轮询刷新的方式去做。(比如强制点击处理,消息才会不再弹出。)
下边分享一段,用redis缓存消息记录,当点击才会取消显示,但只有真正处理才会改变状态的代码。
# 数据库查询消息 def not_opration_message _employee_id=current_employee.id @not_opration_message = Message.where("employee_id=? and state=0",_employee_id) #查询所有未处理的消息 render :layout=> false end # 数据库处理消息 def deal_with_system_message _employee_id=current_employee.id _messages=Message.where("id=?",params[:id]) #查询所有未处理的消息 _message.update_all(:state=>1) #已处理 render :json => true end # 缓存处理消息 def delete_system_message _employee_id=current_employee.id redis=Redis::HashKey.new("user_#{_employee_id}") redis.delete(params[:url]) render :json => true end # 缓存个人所有消息 def system_message _employee_id=current_employee.id redis=Redis::HashKey.new("user_#{_employee_id}") if redis.blank? render :json=> nil else render :json=> redis.to_json end end #订单确认通知,创建消息并缓存 def self.tell_customer_order_confirm customer_order customer_order_detail = customer_order.order_details_userful customer_order_detail.each do |detail| Message.create(message:"#{customer_order.order_no} 客户订单已确认,通知供应商发货", url:"/admin/order_list?order_no=#{customer_order.order_no}",state:0,employee_id:detail.emp) message_hash = Redis::HashKey.new("user_#{detail.emp}") message_hash["/admin/order_list?order_no=#{customer_order.order_no}"] = "#{customer_order.customer_order_no} 客户订单已确认,通知供应商发货" end end
上一篇: Mysql事务处理问题_MySQL
推荐阅读