028-86261949

当前位置:首页 > 技术交流 > 如何用PHP实现消息推送

如何用PHP实现消息推送

2018/07/03 18:00 分类: 技术交流 浏览:485

1. 什么是消息推送
通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。
 
2. 为什么要使用消息推送技术
通常情况下都是用户发送请求浏览器显示用户需要的信息。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息。
 
3. 实现思路
1. 管理员发送消息到swoole服务。
2. Swoole服务接受到管理员发送的信息并且发送给其他的客户端
3. 其他的客户端通过WebSocket监听Swoole服务发送过来的信息并且输出。
4. 实现过程(CentOS环境)
4.1. 安装swoole扩展
pecl install swoole
4.2. 启动swoole服务器
在命令行中输入:
1. php ws_server.php  
 
ws_server.php中的代码
1. <?php   
2. $server = new swoole_websocket_server("0.0.0.0", 9501);  
3. $server->on('open', function (swoole_websocket_server $server, $request) {  
4.         echo "server: handshake success with fd{$request->fd}\n";  
5.     });  
6. $server->on('message', function (swoole_websocket_server $server, $frame) {  
7.         echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";  
8.         foreach ( $server->connections as $fd )  
9.         {  
10.             $server->push( $fd, $frame->data );  
11.         }  
12.     });  
13. $server->on('close', function ($ser, $fd) {  
14.         echo "client {$fd} closed\n";  
15.     });  
16.   
17. $server->start();  
4.3. 管理员向swoole服务发送信息
4.3.1. 安装swoole客户端
1. composer require textalk/websocket  
4.3.2. 管理员的代码
1. <?php   
2. require './vendor/autoload.php';  
3.   
4. use WebSocket\Client;  
5.   
6.   
7. $client = new Client( "ws://swoole所在服务器的IP:9501" );  
8. $client->send("新的信息");
4.4. 客户端监听swoole服务的代码
1. <!DOCTYPE html>  
2. <meta charset="utf-8">  
3. <html lang="zh-CN">  
4. <head>  
5.     <title> Swoole-push-demo </title>  
6.     <meta name="viewport" content="width=device-width, initial-scale=1">  
7.     <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">  
8.     <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>  
9.     <script type="text/javascript">  
10.         var wsServer = 'ws://swoole服务器所在的IP:9501';  
11.         var websocket = new WebSocket(wsServer);  
12.         websocket.onopen = function (evt) {  
13.             console.log("Connected to WebSocket server.");  
14.         };  
15.   
16.         websocket.onclose = function (evt) {  
17.             console.log("Disconnected");  
18.         };  
19.   
20.         websocket.onmessage = function (evt) {  
21.             console.log('Retrieved data from server: ' + evt.data);  
22.             var html = "<a class='list-group-item list-group-item-success'>" + evt.data + "</a>";  
23.             var selector = $( '.list-group > a:first' );  
24.             selector.before( html );  
25.         };  
26.   
27.         websocket.onerror = function (evt, e) {  
28.             console.log('Error occured: ' + evt.data);  
29.         };  
30.     </script>  
31. </head>  
32. <body>  
33.     <div class="page-header">  
34.       <h1> Swoole push client <small> 基于 Swoole 的浏览器推送 demo </small></h1>  
35.     </div>  
36.     <div class="list-group">  
37.       <a href="#" class="list-group-item">Dapibus ac facilisis in</a>  
38.       <a href="#" class="list-group-item">Morbi leo risus</a>  
39.       <a href="#" class="list-group-item">Porta ac consectetur ac</a>  
40.       <a href="#" class="list-group-item">Vestibulum at eros</a>  
41.     </div>  
42.   
43.     <a href="add.html" target="_blank" class="btn btn-info"> 添加信息 </a>  
44.     <br>  
45.     <div class="alert alert-warning" role="alert"> 请保留此页面,打开其他浏览器添加信息,此页面会自动显示你所添加的信息 </div>  
46. </body>  
47. </html>  
   
 
    感谢源码时代教学讲师提供此文章!
    本文为原创文章,转载请注明出处!
#标签:PHP,消息推送