当前位置: 首页 > news >正文

如何用PHP实现消息推送

 什么是消息推送

通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。

2. 为什么要使用消息推送技术

通常情况下都是用户发送请求浏览器显示用户需要的信息。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息。

3. 实现思路

1. 管理员发送消息到swoole服务。

2. Swoole服务接受到管理员发送的信息并且发送给其他的客户端

3. 其他的客户端通过WebSocket监听Swoole服务发送过来的信息并且输出。

4. 实现过程(CentOS环境)

4.1. 安装swoole扩展

pecl install swoole

4.2. 启动swoole服务器

在命令行中输入: 

php ws_server.php 

ws_server.php中的代码

<?php   
$server=new swoole_websocket_server("127.0.0.1",9795);
$server->on('open',function(swoole_websocket_server $server,$request){echo "server: handshake success with fd{$request->fd}\n";
});  
$server->on('message',function(swoole_websocket_server $server,$frame){echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";foreach($server->connections as $fd){$server->push($fd, $frame->data);}
});
$server->on('close',function($ser,$fd){echo "client {$fd} closed\n";
});
$server->start();

4.3. 管理员向swoole服务发送信息

4.3.1. 安装swoole客户端

composer require textalk/websocket

4.3.2. 管理员的代码

<?php
require './vendor/autoload.php';  
use WebSocket\Client;  
$client = new Client( "ws://127.0.0.1:9795" );  
$client->send("新的信息");

4.4. 客户端监听swoole服务的代码

<!DOCTYPE html>
<html>
<head><title></title>
</head>
<body><input type="text" name="shu" id="shu" value=""><button onclick="sendmsg()">浇水</button><script src="//cdn-static.ebaitian.cn/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">var wsServer = 'ws://127.0.0.1:9795';
var websocket = new WebSocket(wsServer);
//监听链接
websocket.onopen = function (evt) {console.log("open");
};console.log(websocket.readyState);
//监听关闭
websocket.onclose = function (evt) {console.log("Disconnected");
};
//监听服务发送消息
websocket.onmessage = function (evt) {console.log(evt);
};
//监听异常
websocket.onerror = function (evt, e) {console.log('Error occured: ' + evt.data);
};
//js向服务器发送消息
function sendmsg(){if(websocket.readyState==1){var content = $('#shu').val();//$('#shu').val('')console.log(content);websocket.send(content);}
}
</script>
</body>
</html>
http://www.lryc.cn/news/3432.html

相关文章:

  • 电子学会2020年6月青少年软件编程(图形化)等级考试试卷(四级)答案解析
  • DaVinci:调色版本
  • 【C++初阶】十二、STL---反向迭代器的实现
  • day 43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
  • [SSD固态硬盘技术 0] SSD的结构和原理导论
  • Vue (3)
  • SQL语句,常用的DDL表操作语句
  • C 语言 宏定义 :字符串化 stringify 的应用
  • 代替swagger的api接口神器
  • 2月12日,30秒知全网,精选7个热点
  • HTML img和video object-fit 属性
  • Pascal版本的 - freopen
  • STM32单片机OLED显示
  • 备战金三银四,软件测试面试题(全)
  • 硬件篇-配置
  • 网页内容 中文乱码 解决办法
  • 【C++之容器篇】造轮子:模拟实现vector类
  • C++中的右值引用与移动构造函数
  • Swift如何使用依赖注入进行解藕
  • 合宙ESP32S3-CORE开发板|保姆级|Arduino IDE|windows11|esp32S3支持库|helloword例程:Arduino 环境搭建
  • CMake中target_precompile_headers的使用
  • SpringCloud和微服务介绍
  • Qt源码编译过程中配置文件中的选项说明
  • Mysql 增删改查(一) —— 查询(条件查询where、分页limits、排序order by、分组 group by)
  • VScode 结合clangd 构建linux源代码阅读环境
  • web应用 —— JavaScript
  • SSM整合SpringSecurity简单使用
  • Java零基础教程——数据类型
  • 【Linux 信号】信号的产生方式、信号的捕捉的全过程
  • 代码随想录第58天(动态规划):● 392.判断子序列 ● 115.不同的子序列