我看了webman/push的插件的描述,比如說
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket地址
app_key: '<app_key,在config/plugin/webman/push/app.php里獲取>',
auth: '/plugin/webman/push/auth' // 訂閱鑒權(quán)(僅限于私有頻道)
});
// 假設(shè)用戶uid為1
var uid = 1;
// 瀏覽器監(jiān)聽user-1頻道的消息,也就是用戶uid為1的用戶消息
var user_channel = connection.subscribe('user-' + uid);
// 當(dāng)user-1頻道有message事件的消息時(shí)
user_channel.on('message', function(data) {
// data里是消息內(nèi)容
console.log(data);
});
user_channel.trigger('client-message', {form_uid:2, content:"hello"});
那么,我后端需要如何做,才能監(jiān)聽到前端發(fā)送來的消息并保存呢?
我是想做一個(gè)客服系統(tǒng),我的思路是,客戶A在跟客服A聊天的時(shí)候,都是把聊天信息發(fā)到服務(wù)器上,然后服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。因?yàn)榱奶煊涗浺4嫦聛怼?br /> 但是看了一圈,好像沒有后端監(jiān)聽前端發(fā)來消息的接口,這也不想websocket 有onMessage 那些接口,我能接收信息,所以,應(yīng)該怎么做呢?請(qǐng)各位大佬不吝賜教
這個(gè)插件應(yīng)該是用來給前端進(jìn)行推送的吧,確實(shí)沒看到如何接收前端發(fā)送的數(shù)據(jù)的方案,但是是否可以利用另外的方案:
新建一個(gè)Chat接口,用來接收前端發(fā)送的數(shù)據(jù),Chat接口處理聊天的業(yè)務(wù)。
我們用客戶A和客戶B 舉個(gè)例子:
客戶A和客服A,以下分別簡(jiǎn)稱ClientA和ClientB
都通過push.js和Server建立私有頻道的連接 分別為clientChannelA 和clientChannelB
ClientA調(diào)用Chat接口 clientChannelB發(fā)送信息,Chat接口接收到客戶A的數(shù)據(jù)Data,通過了身份校驗(yàn)后,確信Chat接口的Data是合法的,然后在Chat接口中調(diào)用 trigger方法,給clientChannelB發(fā)送消息。clientChannelB由于訂閱了clientChannelB的事件,所以可以接收到Chat接口的數(shù)據(jù)。
ClinetA 建立連接:
// 建立連接
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket地址
app_key: '<app_key,在config/plugin/webman/push/app.php里獲取>',
auth: '/plugin/webman/push/auth' // 訂閱鑒權(quán)(僅限于私有頻道)
});
// 假設(shè)用戶uid為1
var uid = 1;
// 瀏覽器監(jiān)聽private-1頻道的消息,也就是用戶uid為1的用戶消息
var user_channel = connection.subscribe('private-' + uid);
// 當(dāng)private-1頻道有message事件的消息時(shí)
user_channel.on('message', function(data) {
// data里是消息內(nèi)容
console.log(data);
});
ClinetB 建立連接:
// 建立連接
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket地址
app_key: '<app_key,在config/plugin/webman/push/app.php里獲取>',
auth: '/plugin/webman/push/auth' // 訂閱鑒權(quán)(僅限于私有頻道)
});
// 假設(shè)用戶uid為2
var uid = 2;
// 瀏覽器監(jiān)聽private-2頻道的消息,也就是用戶uid為2的用戶消息
var user_channel = connection.subscribe('private-' + uid);
// 當(dāng)private-2頻道有message事件的消息時(shí)
user_channel.on('message', function(data) {
// data里是消息內(nèi)容
console.log(data);
});
ClientA 通過Chat接口發(fā)送聊天數(shù)據(jù),然后Chat接口處理業(yè)務(wù)邏輯,并觸發(fā)事件
use Webman\Push\Api;
// 省略的業(yè)務(wù)邏輯
$api = new Api(
// webman下可以直接使用config獲取配置,非webman環(huán)境需要手動(dòng)寫入相應(yīng)配置
'http://127.0.0.1:3232',
config('plugin.webman.push.app.app_key'),
config('plugin.webman.push.app.app_secret')
);
// 給訂閱 private-2 的所有客戶端推送 message 事件的消息
$api->trigger('private-2', 'message', [
'from_uid' => 1,
'content' => '你好,我是客戶A'
]);
然后ServiceA給ClinetA回復(fù)消息也是這種過程
其實(shí)本質(zhì)就是增加一個(gè)接口Chat,用Chat接口做橋接,讓Server來處理分發(fā)邏輯