环境配置:
     swoole 1.9.3、centos6.5(虚拟机)、PHP7.01
 
思路:
     ①通过server中的collections取出fd
     ②写一个admin.html(管理员推送页面) 与 client.html(客户端),html页面的websocket自行可编写
          并在server.php中message事件用循环push数据(server中的collections取出fdfd组)    
$serv->on('Message', function ($server, $frame) {
echo "\n message: " . $frame->data . "\n"; foreach ($server->connections as $key => $value) {
if($frame->fd != $value){
$server->push($value, "客户{$value}:".$frame->data);
}
}
});

注:其实这里需要admin.html发送数据时传token并在message事件中验证是否管理员请求(数据库操作),是才执行推送,否则不做操作

server.php代码如下:

<?php
$serv = new Swoole\Websocket\Server("0.0.0.0", 9502); $serv->on('Open', function ($server, $req) {
echo "\n connection open: " . $req->fd . "\n";
}); $serv->on('Message', function ($server, $frame) {
echo "\n message: " . $frame->data . "\n"; foreach ($server->connections as $key => $value) {
if($frame->fd != $value){
$server->push($value, "客户{$value}:".$frame->data);
}
}
}); $serv->on('Close', function ($server, $fd) {
echo "\n connection close: \n" . $fd;
}); $serv->start();

效果图:

注:客户端websocket自行编写。

上面推送小实例实现中有点问题,并未将客户端与服务端分离开来,以下分离开。
     因为swoole_websocket_server 继承自 swoole_http_server,所以可在websocket中用Request事件,另外用global引入用于在Request事件中push
①首先admin.html改为http请求,且client.html保持不变
 
<form method="post" action="http://localhost:9502/server.php">
<input name="test" type="text" placeholder="please input something">
<input type="submit" value="submit">
</form>

②将Message事件的push部分删掉,如下:

$serv->on('Message', function ($server, $frame) use($redis) {
echo "\n message: " . $frame->data . "\n";
//将来可用于写数据库信息
});

③添加http的Request事件,如下:

//服务端请求更新数据,这里是http方式
$serv->on('Request', function ($req, $respone) {
global $serv; //全局引入$serv
global $redis; //全局引入redis
print_r($req->post);
if(count($req->post)){ //判断下是否有数据
foreach (@$serv->connections as $key => $value) {
@$serv->push($value, "客户{$value}:".$req->post["test"]);
}
$respone->end("success");
}
});

swoole实现websocket推送的更多相关文章

  1. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...

  2. Golang websocket推送

    Golang websocket推送 在工作用主要使用的是Java,也做过IM(后端用的netty websocket).最近想通过Golang重写下,于是通过websocket撸了一个聊天室. 项目 ...

  3. 模拟websocket推送消息服务mock工具二

    模拟websocket推送消息服务mock工具二 在上一篇博文中有提到<使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock>使用electron创建一个模拟后 ...

  4. GoEasy实现websocket 推送消息通知到客户端

    最近在实现一个推送功能,用户扫描二维码签到,后台及时将签到成功信息推送到浏览器端.排除了前端ajax轮询的方式,决定采用websocket及时推送. 于是发现了第三方websocket推送库GoEas ...

  5. 小谢第37问:关于websocket推送进度,本地保存进度条,然后跳出页面进入后再显示的问题

    1.主要技术点:sessionStorage 会话存储进度 这里在使用之前,顺便说一下cookie.sessionStorage.localStorage 共同点:都是保存在浏览器端,且同源的. 区别 ...

  6. 利用奇偶数来获取websocket推送时间间隔(或者比较前一个数和下一个数的变化)

    利用奇偶数来获取websocket推送时间间隔(或者比较前一个数和下一个数的变化) 在vue中的 data () {     return { countTime: 0,         newDat ...

  7. 基于Java的WebSocket推送

    WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...

  8. web全栈应用【爬取(scrapy)数据 -> 通过restful接口存入数据库 -> websocket推送展示到前台】

    作为 https://github.com/fanqingsong/web_full_stack_application 子项目的一功能的核心部分,使用scrapy抓取数据,解析完的数据,使用 pyt ...

  9. 从构建分布式秒杀系统聊聊WebSocket推送通知

    秒杀架构到后期,我们采用了消息队列的形式实现抢购逻辑,那么之前抛出过这样一个问题:消息队列异步处理完每个用户请求后,如何通知给相应用户秒杀成功? 场景映射 首先,我们举一个生活中比较常见的例子:我们去 ...

随机推荐

  1. 最小化安装CentOS7,没有ifconfig命令---yum search command_name搜索未知包名

    新安装的CentOS7系统,想查询ip的时候,发现没有ifconfig这个命令: -bash: ifconfig: 未找到命令 yum安装: 没有可用软件包 ifconfig 既然知道命令,搜索一下命 ...

  2. python HTMLTestRunner.py

    Mac下HTMLTestRunner.py存放路径: -/anaconda/lib/python3.6/site-packages/HTMLTestRunner.py 已经更改,python3可以直接 ...

  3. Django的学习之路

    Django基础 Django框架基础 http协议及web框架 Django-2的路由层(URLconf) Django的视图层 Django框架之第三篇模板语法(重要!!!) Django框架之模 ...

  4. C# 进程(应用程序)间通信

    SendMessage用法: 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一. ...

  5. leetcode67

    public class Solution { public string AddBinary(string a, string b) { var list = new List<string& ...

  6. 「小程序JAVA实战」小程序视频展示页开发(52)

    转自:https://idig8.com/2018/09/22/xiaochengxujavashizhanxiaochengxushipinzhanshiyekaifa51/ 这次说下,小程序的视频 ...

  7. [原创]Spring Boot + Mybatis 简易使用指南(一)基础环境搭建

    前言 作者: Ant QQ:517377100 相对于使用JdbcTemplate,Mybatis可自动建立pojo类型与数据库列的映射关系,数据库访问层的开发简单了许多 所有数据库访问操作,均封装在 ...

  8. 使用D3D渲染YUV视频数据<转>

    源代码下载 转载地址:http://blog.csdn.net/dengzikun/article/details/5824874 源码地址:http://download.csdn.net/down ...

  9. spring拾遗(一)——@Value注入static属性

    一般情况的下的@Value是用在非静态方法上的,如下: import org.springframework.beans.factory.annotation.Value; import org.sp ...

  10. (1)activiti认识以及数据库和插件配置

    工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程, 从而实现某个预期的业务目标, ...