关于使用webman/push的问题

siyuankeji

问题描述

我看了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' // 订阅鉴权(仅限于私有频道)
});
// 假设用户uid为1
var uid = 1;
// 浏览器监听user-1频道的消息,也就是用户uid为1的用户消息
var user_channel = connection.subscribe('user-' + uid);

// 当user-1频道有message事件的消息时
user_channel.on('message', function(data) {
    // data里是消息内容
    console.log(data);
});
user_channel.trigger('client-message', {form_uid:2, content:"hello"});

那么,我后端需要如何做,才能监听到前端发送来的消息并保存呢?

我是想做一个客服系统,我的思路是,客户A在跟客服A聊天的时候,都是把聊天信息发到服务器上,然后服务器进行转发。因为聊天记录要保存下来。
但是看了一圈,好像没有后端监听前端发来消息的接口,这也不想websocket 有onMessage 那些接口,我能接收信息,所以,应该怎么做呢?请各位大佬不吝赐教

278 1 1
1个回答

深路潇湘

这个插件应该是用来给前端进行推送的吧,确实没看到如何接收前端发送的数据的方案,但是是否可以利用另外的方案:
新建一个Chat接口,用来接收前端发送的数据,Chat接口处理聊天的业务。
我们用客户A和客户B 举个例子:

客户A和客服A,以下分别简称ClientA和ClientB
都通过push.js和Server建立私有频道的连接 分别为clientChannelA 和clientChannelB
ClientA调用Chat接口 clientChannelB发送信息,Chat接口接收到客户A的数据Data,通过了身份校验后,确信Chat接口的Data是合法的,然后在Chat接口中调用 trigger方法,给clientChannelB发送消息。clientChannelB由于订阅了clientChannelB的事件,所以可以接收到Chat接口的数据。

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' // 订阅鉴权(仅限于私有频道)
});
// 假设用户uid为1
var uid = 1;
// 浏览器监听private-1频道的消息,也就是用户uid为1的用户消息
var user_channel = connection.subscribe('private-' + uid);

// 当private-1频道有message事件的消息时
user_channel.on('message', function(data) {
    // data里是消息内容
    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' // 订阅鉴权(仅限于私有频道)
});
// 假设用户uid为2
var uid = 2;
// 浏览器监听private-2频道的消息,也就是用户uid为2的用户消息
var user_channel = connection.subscribe('private-' + uid);

// 当private-2频道有message事件的消息时
user_channel.on('message', function(data) {
    // data里是消息内容
    console.log(data);
});

ClientA 通过Chat接口发送聊天数据,然后Chat接口处理业务逻辑,并触发事件


use Webman\Push\Api;

// 省略的业务逻辑

$api = new Api(
    // webman下可以直接使用config获取配置,非webman环境需要手动写入相应配置
    '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回复消息也是这种过程

其实本质就是增加一个接口Chat,用Chat接口做桥接,让Server来处理分发逻辑

×
🔝