Webサイトメッセージのリアルタイムプッシュとキャッシュ処理

2060 ワード

詳細
一:rails 5でActionケーブルを発売してメッセージを実現する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