在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
php + swoole 实现服务端主动推送消息 教学视频分享: http://zixueit.cn/ 点击链接搜索 Swoole入门到实战 swoole: 完美的实现了PHP的异步、并行、高性能网络通信引擎,支持TCP长连接,Websocket,Mqtt等协议,再开发过程中,当我们需要一套自己的销售系统的时候难以避免的就是消息推送,不多哔哔直接干 项目场景:公司开发的管理后台,将销售人员纳入管理系统当中,将收集的意向用户的信息分发给销售人员,分发后需要即时向销售人员发送通知 使用到swoole函数 server->on swoole回调函数 onopen() 打开 onmessage() 消息函数,接收客户端消息后触发 必选函数 onclose() 关闭 start() 初始化
借助以上几个函数,并结合数据、业务逻辑即可实现服务端向客户端的消息推送以下为简单的demo仅供参考
demo效果图
<?php
#!/www/server/php/72/bin/php -q
class init{
public $db;
public $ws;
public $link;
public function __construct(){
$this->ws = new Swoole\WebSocket\Server("0.0.0.0", 9502); 实例化websocket的类 并且连接我们的开放给swoole的端口
$this->ws->on('open', function ($ws, $request) {
$this->link = $ws->getClientInfo($request->fd);
$this->message($request->fd);
此处调用自定义的方法取出数据库中的要发送的数据
});
$this->ws->on('message', function ($ws, $frame) {
});
//监听 WebSocket 连接关闭事件
$this->ws->on('close', function ($ws, $fd) {
# echo "client-{$fd} is closed\n";
});
$this->ws->start();
}
以上的函数上面有提到,具体含义可以在文章头部的分享连接中找到
public function message($fd) 该方法为自定义方法,目的在于取出数据库中的要发送的数据推送给客户端
{
$service = $this->ws;
$db = new PDO('mysql:host=自己的ip地址;dbname=数据库名', '数据库用户名', '密码');
$sql = "select title, created_at,id from 表名 where (`news_status` = 0 and `receive_id` = 1) or `is_all` = 1 order by `news_rank` asc, `created_at` desc";
$array = $db->query($sql);
foreach($array as $k=>$v)
{
$data[$k]['title'] = $v['title'];
$data[$k]['crated_at'] = $v['created_at'];
$data[$k]['id'] = $v['id'];
}
$data = json_encode($data);
$this->ws->tick(15000, function() use ($service, $fd, $data){
#$data = Array('自古英雄多寂寥','我言秋日胜春朝','晴空一鹤排云上','便引诗情到碧霄','道可道非常道','名可名非常名','啦啦啦啦啦啦','啊啊啊啊啊啊','小黑屋');
#$service->push($fd, "server: ".$data[array_rand($data)]);
$service->push($fd, $data);
});
}
}
new init();
以上就是服务端的代码,具体的含义因个人理解不够深刻不逐步解释以免误导大家,大家可以参考上面的分享连接,进行下载教程
服务端代码编辑好后我们看下客户端代码,简单的令人发指
var wsServer = 'ws://IP地址+端口; 客户端展示代码,只是demo逐步注释 最终效果
|
2022-08-17
2022-11-06
2022-07-08
2022-07-22
2022-08-17
请发表评论