2016-11-14 24 views
1

我想在我的系統中建立一個函數,它可以發送和接收來自一個用戶的消息,形式爲邀請,如文本字段,並顯示消息「你想要和我一起去購物?「並在該消息窗口「接受」,「不接受」下面有兩個按鈕。自動從數據庫中調用新消息

我已經可以將邀請郵件保存在數據庫中。

create_table "processings", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 
    t.integer "shopping_process_id" 
    t.integer "shopping_list_id" 
    t.boolean "accepted" 
    t.datetime "responded" 
    t.string "message" 
    t.index ["shopping_list_id"], name: "index_processings_on_shopping_list_id", using: :btree 
    t.index ["shopping_process_id"], name: "index_processings_on_shopping_process_id", using: :btree 
    end 

現在我問我怎麼可以建立一個功能,它可以自動調用這個消息對於用戶來說,誰應該收到此消息,立刻道:這裏是將在信息保存在DB/schema.rb消息保存在數據庫後。你有一個想法,我可以如何實現這一點?

回答

1

你要求的是服務器發起的通信 - 你希望服務器向客戶端發送消息。這不是HTTP的工作方式。使用HTTP,您可以向服務器發送請求並且服務器響應。所以,你的選擇是:

一)編寫發送一個請求到服務器每分鐘或每隔幾秒鐘,運行異步(不推薦)

,或者

B A JavaScript函數)使用WebSockets到創建服務器和用戶之間的鏈接,從而能夠發送和接收通信。

隨着網絡套接字,我有一些經驗,有很多選擇來實現。我這樣做的方式是使用Rails 5 ActionCable,'puma'寶石(Puma使Rails服務器線程化,ActionCable需要)和Redis。關於如何爲聊天實現Rails ActionCable,這是一個相當不錯的link here。它一步一步地走,你只需要根據自己的需要來改變它。它確實有一個致命的缺陷,我固定。

This是我對上面文章的github回購的修復。在上面的文章中,消息被髮送到所有聊天室,因爲作者不會將每個連接都指定給一個聊天室,而是使其針對所有聊天室。 ActionCable的技巧是確保每個連接只向每個用戶發送正確的信息。您不希望所有用戶都收到邀請,因此您需要根據用戶標識或其他唯一標識進行連接,並根據該標識發送確認。

祝你好運!