1,使用私有頻道需要鑒權(quán),如下代碼將access_token 傳給服務(wù)端,在服務(wù)端auth接口里面對token進(jìn)行驗證,這樣可以嗎,或者有更優(yōu)雅的辦法?
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket地址
app_key: 'xxxx',
auth: '/plugin/webman/push/auth?token=111111' // 訂閱鑒權(quán)(僅限于私有頻道)
});
2,群聊場景如何實現(xiàn),新建一個頻道,所有客戶端訂閱這個頻道嗎?
3,單聊如何實現(xiàn),a->b 發(fā)送消息,a訂閱a->b 這個頻道才能發(fā)消息,b也需要訂閱a->b這個頻道才能收到消息,每新增一個單聊,都需要新增一個頻道嗎?這樣是否需要一個頻道接口?或許有更優(yōu)雅的辦法?
4,a給b發(fā)送離線消息,b不在線,服務(wù)端將消息存儲下來,定時器檢測b的狀態(tài),b 上線將消息推送給b,還是寫一個離線消息接口,上線后主動查詢未讀的離線消息?
1、一般不用傳token,因為瀏覽器發(fā)起請求服務(wù)端會直接拿到session。如果你沒用session的話,可以傳token
2、一個群聊一個頻道
3、單聊每個用戶訂閱一個自己的頻道,給哪個用發(fā)消息直接向?qū)?yīng)的頻道發(fā)布消息,發(fā)布時帶上發(fā)布人的id用來區(qū)和誰群聊
4、上線主動ajax請求讀一遍未讀消息
好的,謝謝老大,還有疑問:
1,關(guān)于單聊,每個用戶訂閱自己的頻道就能收到發(fā)送給自己的消息,這個我理解了;
如果要給別人發(fā)送消息,是否要訂閱對方的頻道?
意思就是a->b,a->c發(fā)送消息,a是否需要訂閱a->b,a->b這個頻道
2,多個單聊的情況下,聊天列表如何實現(xiàn),訂閱對方的頻道并將頻道列表作為聊天列表嗎?
3,離線消息處理問題,服務(wù)端需要對消息做一些處理,比如當(dāng)用戶下線時,記錄發(fā)給該用戶的消息,記錄消息閱讀狀態(tài),這個并沒有找到onmessage,onclose這些事件,請問應(yīng)該怎么處理
1、對于單聊來說,用戶a只訂閱a的頻道,b只訂閱b的頻道,沒必要訂閱a-b等頻道
2、頻道只做消息推送,和誰在聊天寫入數(shù)據(jù)庫,聊天列表從數(shù)據(jù)庫讀
3、webman/push 有webhook,會通知哪個頻道下線了,比如a頻道下線了就是a用戶下線了
沒太明白:
3、單聊每個用戶訂閱一個自己的頻道,給哪個用發(fā)消息直接向?qū)?yīng)的頻道發(fā)布消息,發(fā)布時帶上發(fā)布人的id用來區(qū)和誰群聊
文檔說明:
客戶端間推送僅支持私有頻道(private-開頭的頻道),并且客戶端只能觸發(fā)以 client- 開頭的事件。
a如何發(fā)送給b消息:a訂閱了頻道a 如何發(fā)送到頻道b 按照這個邏輯。
私聊使用私有頻道嗎 我沒太弄明白
大兄弟,在嗎?
沒太明白:
3、單聊每個用戶訂閱一個自己的頻道,給哪個用發(fā)消息直接向?qū)?yīng)的頻道發(fā)布消息,發(fā)布時帶上發(fā)布人的id用來區(qū)和誰群聊
文檔說明:
客戶端間推送僅支持私有頻道(private-開頭的頻道),并且客戶端只能觸發(fā)以 client- 開頭的事件。
a如何發(fā)送給b消息:a訂閱了頻道a 如何發(fā)送到頻道b 按照這個邏輯。
私聊使用私有頻道嗎 我沒太弄明白
私聊和私有頻道沒有直接關(guān)系。
公有頻道可以理解為公共電話號碼,誰都知道,可以直接通過公共電話給他發(fā)數(shù)據(jù)。
私有頻道可以理解為私人號碼,只有有權(quán)限的人才知道,安全性更好。
私聊走公有頻道和私有頻道都可以。
大佬真猛 實時響應(yīng),太贊了。
我理一下:
方法1:如果客戶端使用js給接口php發(fā)送,php在推送,這倒是推送私有 公共頻道都可以。這個我能明白。
方法2:如果使用客戶端推送(js直推): 看文檔只能推送私有頻道,a訂閱a,不訂閱b,這種如何給b發(fā)送?
還是說做聊天系統(tǒng),js發(fā)送到php,就用php推送完事。 那客戶端推送的場景是什么。
客戶端推送
以上例子都是客戶端訂閱某個頻道,服務(wù)端調(diào)用API接口推送。webman/push 也支持客戶端直接推送消息。
注意
客戶端間推送僅支持私有頻道(private-開頭的頻道),并且客戶端只能觸發(fā)以 client- 開頭的事件。
客戶端觸發(fā)事件推送的例子
var user_channel = connection.subscribe('private-user-1');
user_channel.on('client-message', function (data) {
//
});
user_channel.trigger('client-message', {form_uid:2, content:"hello"});
注意
以上代碼給所有(除了當(dāng)前客戶端)訂閱了 private-user-1 的客戶端推送 client-message 事件的數(shù)據(jù)(推送客戶端不會收到自己推送的數(shù)據(jù))。
單聊還是用PHP推送比較好
js直推適合不需要php后端參與的場景,例如不需要記錄消息到數(shù)據(jù)庫,不不需要后端其它驗證。
例如對戰(zhàn)小游戲?qū)崟r更新坐標(biāo),例如聊天室不需要記錄歷史消息