1.什么是消息推送
通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。
2.为什么要使用消息推送技术
通常情况下都是用户发送请求浏览器显示用户需要的信息。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息。
3.实现思路
1.管理员发送消息到swoole服务。
2.Swoole服务接受到管理员发送的信息并且发送给其他的客户端
3.其他的客户端通过WebSocket监听Swoole服务发送过来的信息并且输出。
4.实现过程(CentOS环境)
4.1.安装swoole扩展
peclinstallswoole
4.2.启动swoole服务器
在命令行中输入:
1.phpws_server.php
ws_server.php中的代码
1.<?php
2.$server=newswoole_websocket_server("0.0.0.0",9501);
3.$server->on('open',function(swoole_websocket_server$server,$request){
4.echo"server:handshakesuccesswithfd{$request->fd}\n";
5.});
6.$server->on('message',function(swoole_websocket_server$server,$frame){
7.echo"receivefrom{$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
8.foreach($server->connectionsas$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.composerrequiretextalk/websocket
4.3.2.管理员的代码
1.<?php
2.require'./vendor/autoload.php';
3.
4.useWebSocket\Client;
5.
6.
7.$client=newClient("ws://swoole所在服务器的IP:9501");
8.$client->send("新的信息");
4.4.客户端监听swoole服务的代码
1.<!DOCTYPEhtml>
2.<metacharset="utf-8">
3.<htmllang="zh-CN">
4.<head>
5.<title>Swoole-push-demo</title>
6.<metaname="viewport"content="width=device-width,initial-scale=1">
7.<linkrel="stylesheet"href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"crossorigin="anonymous">
8.<scripttype="text/javascript"src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
9.<scripttype="text/javascript">
10.varwsServer='ws://swoole服务器所在的IP:9501';
11.varwebsocket=newWebSocket(wsServer);
12.websocket.onopen=function(evt){
13.console.log("ConnectedtoWebSocketserver.");
14.};
15.
16.websocket.onclose=function(evt){
17.console.log("Disconnected");
18.};
19.
20.websocket.onmessage=function(evt){
21.console.log('Retrieveddatafromserver:'+evt.data);
22.varhtml="<aclass='list-group-itemlist-group-item-success'>"+evt.data+"</a>";
23.varselector=$('.list-group>a:first');
24.selector.before(html);
25.};
26.
27.websocket.onerror=function(evt,e){
28.console.log('Erroroccured:'+evt.data);
29.};
30.</script>
31.</head>
32.<body>
33.<divclass="page-header">
34.<h1>Swoolepushclient<small>基于Swoole的浏览器推送demo</small></h1>
35.</div>
36.<divclass="list-group">
37.<ahref="#"class="list-group-item">Dapibusacfacilisisin</a>
38.<ahref="#"class="list-group-item">Morbileorisus</a>
39.<ahref="#"class="list-group-item">Portaacconsecteturac</a>
40.<ahref="#"class="list-group-item">Vestibulumateros</a>
41.</div>
42.
43.<ahref="add.html"target="_blank"class="btnbtn-info">添加信息</a>
44.<br>
45.<divclass="alertalert-warning"role="alert">请保留此页面,打开其他浏览器添加信息,此页面会自动显示你所添加的信息</div>
46.</body>
47.</html>
推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。该功能使用Swoole技术实现。源码时代成都校区线下公开课了解更多。