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 消息推送的更多相关文章

  1. node.js Websocket消息推送---GoEasy

    Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...

  2. C(++) Websocket消息推送---GoEasy

    Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...

  3. 【WebSocket】WebSocket消息推送

    准备使用WebSocket实现Java与Vue或者安卓间的实时通信,实现私密聊天.群聊.查询下资料备用. WebSocket客户端 websocket允许通过JavaScript建立与远程服务器的连接 ...

  4. swoole websocket服务推送

    用过workerman, 两个字"好用",对于swoole最近有时间也研究研究 swoole的websocket 很好实现 如官网 https://wiki.swoole.com/ ...

  5. 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]

    在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能 ...

  6. websocket消息推送实现

    一.服务层 package com.demo.websocket; import java.io.IOException; import java.util.Iterator; import java ...

  7. WebSocket消息推送

    WebSocket协议是基于TCP的一种新的网络协议,应用层,是TCP/IP协议的子集. 它实现了浏览器与服务器全双工(full-duplex)通信,客户端和服务器都可以向对方主动发送和接收数据.在J ...

  8. spring boot下WebSocket消息推送(转)

    原文地址:https://www.cnblogs.com/betterboyz/p/8669879.html WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.W ...

  9. spring+rabbitmq+stomp搭建websocket消息推送(非spring boot方式)

    前言: 两年前做过spring+activemq+stomp的ws推送,那个做起来很简单,但现在公司用的mq中间件是rabbitmq,因此需要通过rabbitmq去做ws通信.仔细搜了搜百度/谷歌,网 ...

随机推荐

  1. PyCharm永久激活

    目录 windws Mac Windows下破解 激活前准备工作 激活前请先关闭pycharm 修改配置文件的时候你需要填写你的安装路径 如果出现修改配置文件后无法打开pycharm,那就移动补丁的位 ...

  2. python random模块(随机数)详解

    使用前要先导入random模块 import random random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random ...

  3. python 内置方法的时间复杂度

    好文,非常值得参考 http://www.orangecube.net/python-time-complexity

  4. MariaDB Galera Cluster的配置测试

    参考的https://fykuan.hsnuer.net/blog/2015/01/23/debian-%E4%B8%8A%E5%AE%89%E8%A3%9D-mariadb-galera-clust ...

  5. Accept Job Offer Email Template

    Accept Job Offer Email Template <Date> <Hiring Manager’s name> <Company name> < ...

  6. 【转】Java transient关键字使用小记

    哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transi ...

  7. 介绍一个开源的 C++ 开发框架 openFrameworks 。

    作为一个图形图像方向的研究生,我经常都在和 OpenGL .OpenCV 等多种 C++ 库打交道.这些库遵循着不同的规则和用法:另外,为了让自己的程序具有更多的交互能力,编写界面也是一个家常便饭的工 ...

  8. C++快速输出一个整数的二进制表示(不用写函数)

    如果要输出int型的整数x,代码为: cout << bitset<>(x) << endl; 如果要输出long long型的整数x,代码为: cout < ...

  9. 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #4 如何使用Git

    HACK #4 如何使用Git 本节介绍Git的使用方法.Git是Linux内核等众多OSS(Open Source Software,开源软件)开发中所使用的SCM(Source Code Mana ...

  10. Java 8 字符串日期排序

    public class ObjectDto implements Serializable { private static final long serialVersionUID = 858983 ...