如何用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>
感谢源码时代教学讲师提供此文章!
本文为原创文章,转载请注明出处!
赞 0