手册上的与thinkphp结合那边send_message.php(利用GatewayClient发送)是怎么触发的??

已邀请:

zyx

赞同来自: empty

还有个问题 在tp框架里这例子上的代码 bind.php和send_message.php是不是可以整合成一个控制器?

evilk

赞同来自: shuiwenxing

server端可以完全跟我们常用的web端框架分离部署,比如你的web应用根目录是A,server端的目录(也就是GatewayWorker的目录)是B,
A跟B,没有任何联系,可以任意分离部署,完全没有任何影响
一开始,你启动server端,让服务启动起来,然后,
比如你有个order页面,在这个页面上的Js代码中,写上文档示例中的js代码,一旦通过浏览器访问这个页面,
那么这个页面也就跟server端通过websocket建立了连接,js中的ajax中的URL,请求的是控制器里面任意一个方法,这个方法是专门用来做绑定clientId跟uId的,
这个时候,就需要用到 GatewayClient/Gateway.php 这个文件,以TP5来说,你可以把它当做一个第三方类库引入框架里,也就是放在根目录下的extend目录中,
此时注意命名空间,然后回到控制器,在这个绑定的方法中,可以直接照搬示例中bind.php的代码,因为需要用到 Gateway 这个类,
接着,假如,我们有个业务,用户下单后,要推送一条消息给用户,那么,你就可以在你的控制器里面,写一个方法,
这个方法具体做什么呢,按照刚才我们假定的需求,写一段下单的代码后,然后就把示例中 Gateway::sendToUid($uid, $message); 这段代码加到刚才那段下单的
代码后面(这段代码你可以放在任何可以正常使用的地方,这里只是做演示,所以耦合在一起),
这个有点类似于 laravel 中的事件触发,用户下单,这个动作,这个操作,触发了一个事件,在这里,这个事件就是 推送消息
假如此时,用户在order页面上,进行了下单这个操作,那么,就会通过http请求到我们的web端,
根据刚才那段代码,触发 推送消息 这个事件,也就是执行那段 Gateway::sendToUid($uid, $message);
如果用户没有关闭order这个页面,那么页面上就会根据那段JS代码,进行消息提醒,这个示例的大致流程就是这样
总的来说就是-
启动server(这个server不是web端,而是GatewayWorker)
->用户访问order页面(一旦访问,就建立了连接,并绑定)
->用户执行下单操作,触发推送事件
->页面收到server端推来的消息,并弹出提醒

示例中有一点要注意,不晓得是不是个例,send_message.php 中,Gateway::sendToUid($uid, $message);
这里的 $message 不能是 string 而应该是 类似
json_encode(array(
'status' => 0,
'message' => 'xxxxxx'
))

因为 页面中 js 部分 接收到的消息,最初应该是 jsonString
第一次接触这样的框架,跟以前开发web端,思路不太一样
才摸索了两天,还有很多不懂,希望向各位大神学习,共勉

walkor

赞同来自:

请把问题描述清楚

zyx

赞同来自:

手册上结合thinkphp那页 的例子 是会实现什么效果?

walkor

赞同来自:

结合的效果

zyx

赞同来自:

。。。我是不知道send_message.php那段代码怎么用

walkor

赞同来自:

可以

要回复问题请先登录注册