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