swoole WebSocket 消息推送
server.php
<?php
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set("fd", "[]"); //每次第一次执行都需要先清空reids里面的标识 $server = new swoole_websocket_server("0.0.0.0", 9502); $server->on('open', function (swoole_websocket_server $server, $request) use($redis) {
echo "访客{$request->fd}进来了\n";
$server->push($request->fd, "{$request->fd}客户进来了");
$str = json_decode($redis->get("fd"), true);
if($str == "") $str = [];
if(!in_array($request->fd, $str)){
array_push($str, $request->fd);
$str = json_encode($str);
$redis->set("fd", $str);
echo "目前在线访客:";
print_r($redis->get("fd"));
}
}); $server->on('message', function (swoole_websocket_server $server, $frame) use($redis) {
echo "系统消息说:{$frame->data}\n";
$str = json_decode($redis->get("fd"), true);
foreach ($str as $key => $value) {
if($frame->fd != $value){
$server->push($value, "系统消息说:".$frame->data);
}
}
}); $server->on('close', function ($ser, $fd) use($redis) {
echo "client {$fd} closed\n";
$str = json_decode($redis->get("fd"), true);
$point = array_keys($str, $fd, true); //search key
array_splice($str, $point['0'],1); //delete array
$str = json_encode($str);
$redis->set("fd", $str);
echo "删除后在线访客:";
print_r($redis->get("fd"));
}); $server->start();
Cli命令行执行:/usr/local/php/bin/php server.php
client.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="main">
<div class="msgs">
消息通知:<span id="push_content" style="color:red"></span>
</div>
</div>
</body>
<script>
var socket = new WebSocket('ws://23.27.127.32:9502'); //监听端口
socket.onopen = function () { //监听是否连接服务器成功触发
console.log('Connected!');
//socket.send("这条信息会返回给服务器看"); //重要!!客户端返回服务器
};
socket.onmessage = function (event) { // **接收到服务器数据**触发
console.log(event.data);
// alert('Received data: ' + event.data);
document.getElementById("push_content").innerHTML = event.data;
// socket.close();
};
socket.onclose = function () { //与服务器连接断开触发
console.log('Lost connection!');
};
socket.onerror = function () { //与服务器连接出现错误触发
console.log('Error!');
};
// socket.send('hello, world!'); </script>
</html>
admin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>后台推送界面</title>
</head>
<body>
<div>
<input type="text" name="content" placeholder="请输入需要推送的信息">
<button id="push_button">推送</button>
</div>
</body>
<script>
window.onload = function () {
var socket = new WebSocket('ws://23.27.127.32:9502'); //监听端口
var push_button = document.getElementById("push_button");
var push_content = document.getElementsByName("content"); push_button.onclick = function () {
socket.send(push_content['0'].value);
}
socket.onmessage = function (event) { // **接收到服务器数据**触发
// alert('Received data: ' + event.data); //这里应该返回发送成功的额标识
};
socket.onopen = function () { //监听是否连接服务器成功触发
console.log('Connected!');
// socket.send(push_content['0'].value); //重要!!客户端返回服务器
}; socket.onclose = function () { //与服务器连接断开触发
console.log('Lost connection!');
};
socket.onerror = function () { //与服务器连接出现错误触发
console.log('Error!');
};
};
</script>
</html>




swoole WebSocket 消息推送的更多相关文章
- node.js Websocket消息推送---GoEasy
Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...
- C(++) Websocket消息推送---GoEasy
Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...
- 【WebSocket】WebSocket消息推送
准备使用WebSocket实现Java与Vue或者安卓间的实时通信,实现私密聊天.群聊.查询下资料备用. WebSocket客户端 websocket允许通过JavaScript建立与远程服务器的连接 ...
- swoole websocket服务推送
用过workerman, 两个字"好用",对于swoole最近有时间也研究研究 swoole的websocket 很好实现 如官网 https://wiki.swoole.com/ ...
- 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]
在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能 ...
- websocket消息推送实现
一.服务层 package com.demo.websocket; import java.io.IOException; import java.util.Iterator; import java ...
- WebSocket消息推送
WebSocket协议是基于TCP的一种新的网络协议,应用层,是TCP/IP协议的子集. 它实现了浏览器与服务器全双工(full-duplex)通信,客户端和服务器都可以向对方主动发送和接收数据.在J ...
- spring boot下WebSocket消息推送(转)
原文地址:https://www.cnblogs.com/betterboyz/p/8669879.html WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.W ...
- spring+rabbitmq+stomp搭建websocket消息推送(非spring boot方式)
前言: 两年前做过spring+activemq+stomp的ws推送,那个做起来很简单,但现在公司用的mq中间件是rabbitmq,因此需要通过rabbitmq去做ws通信.仔细搜了搜百度/谷歌,网 ...
随机推荐
- 【转】vim环境设置和自动对齐
原文网址:http://blog.chinaunix.net/uid-23525659-id-4340245.html 注:如果是用vim编写代码,建议开启vim的文件类型自动检测功能,这样编写代码换 ...
- 64位windows 2003和windows xp
msdn windows2003 64位简体中文企业版R2 sp2(cn_win_srv_2003_r2_enterprise_x64_with_sp2_vl) ed2k://|file|cn_win ...
- JProfiler 8(一个很好的java性能监控工具) 下载和注册码
windows x64 zip下载地址:http://download-aws.ej-technologies.com/jprofiler/jprofiler_windows-x64_8_0_1.zi ...
- 移动端开发之px,em和rem详解
px:表示的是绝对的像素值,1px就是1像素大小 em:关于em,网上有资料说是关于父元素的,但是其实个人感觉这种说法是不对的,其实em的大小是根据自身的font-size确定的,而只是正常的情况下子 ...
- Could not write content: No serializer found for class and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
1. 问题 org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: N ...
- 调用WebAPI接口地址返回序列化的JSON对象中的属性都加了个k__BackingField关键字的解决办法
1.问题现象: 2.造成此问题的原因是返回的结果对象实体上面加了个可序列号特效 [Serializable].去掉就可以了. 3.解决后的效果:
- 马士兵Spring-声明式事务管理-annotation
1.事务加在DAO层还是service层? service中可能多涉及多种DAO的操作,比如存了一个User之后,需要保存一条日志信息:如果在DAO中分别设置事务的话,一个DAO下面方法抛出异常了,但 ...
- 常见报表的JS代码
1.合并单元格 这个表格在报表里面算是比较典型的 1.里面的表格的列标题现在是写死的,其实这些可以通过配置进行 2.至于如果表头要进行合并(这种需求比较少,也比较容易实现) 3.至于统计:最好在后台按 ...
- centos7开发环境配置总结
1.win10下SecureCRT SSH连接慢 2.CentOS 7下Samba服务器的安装与配置 3.
- canvas变换
canvas变换 方法 save() 保存canvas状态 restore() 回复canvas保存的状态 translate(x, y) 移动canvas位置 rotate(radians) 顺时针 ...