网站消息实时推送与缓存处理

一:在rails5中推出了ActionCable来实现消息的websoket推送
参考链接
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

猜你喜欢

转载自schooltop.iteye.com/blog/2326439
今日推荐