php插件Workerman聊天室示例

news2025/1/18 17:07:32

在这里插入图片描述
在这里插入图片描述
chat.php内容如下

<?php
    //使用workerman,只需引入这个文件
    require_once "workerman-4.0/Autoloader.php";
    //创建服务器,监听3000端口
    $wsServer=new \Workerman\Worker("websocket://127.0.0.1:3000");

    $wsServer->onConnect=function ($conn){//$conn保存了当前用户的连接

        //心跳,每隔2秒,发送消息
        \Workerman\Lib\Timer::add(2,function () use($conn){
            $conn->send(json_encode(array(['type'=>'ping','content'=>'心跳'])));

        });


    };
    $wsServer->onMessage=function ($conn,$data){
//        echo $data.PHP_EOL;
//        $conn->send("我知道了");

        //$conn->worker->connections 是一个数组,保存了所有客户端连接
        foreach ($conn->worker->connections as $v){
            if($v!=$conn){//自己写的消息不再发给自己
                $v->send(json_encode(array(['type'=>'msg','content'=>$data])));//群聊,向所有连接的客户端发消息
            }

        }

    };
    $wsServer->onError=function (){

    };
    $wsServer->onClose=function (){

    };

    //让服务器开始运行
    $wsServer->runAll();

用cmd启动服务在这里插入图片描述

客户端代码,用的浏览器h5

<!DOCTYPE html>

<head>
    <meta charset="UTF-8">
    <title>首页</title>
<!--    <script src="/static/js/jquery.min.js"></script>-->
    <script src="/static/js/jquery-1.12.3.js"></script>
    <script src="/static/js/vue2_dev.js" type="text/javascript"></script>
    <link href="/static/css/main.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="app" >

    <button onclick="openJSSocket()" >js ---  openJSSocket连接到服务器</button>
    <div>
        <div id="msbox" style="width: 600px;background: #fff;height: 300px;overflow: auto;border: 1px solid #000000">

        </div>
        <div>
            <input type="text" id="msg" >
            <button onclick="sendMesg()">发送</button>
        </div>
    </div>
</div>

<script>
    var socket=null;
    function openJSSocket(){


        // 创建一个WebSocket对象
        socket = new WebSocket("ws://127.0.0.1:3000");

        // 当WebSocket连接成功时触发
        socket.onopen = function(event) {
            console.log("WebSocket 连接成功");

            // 向服务器发送消息
            socket.send("Hello Server!");
        };

        // 当收到服务器发送的消息时触发
        socket.onmessage = function(event) {
            console.log("收到服务器的消息:" + event.data);
            //解析返回的json对象
            var res=JSON.parse(event.data)
            if(res[0].type=='msg'){
                $("#msbox").append('<div class="serveclss">'+res[0].content+'</div>')
            }


            //直接显示数据
            // $("#msbox").append('<div class="serveclss">'+event.data+'</div>')
        };

        // 当WebSocket连接关闭时触发
        socket.onclose = function(event) {
            console.log("WebSocket 连接关闭");
        };

        // 当发生错误时触发
        socket.onerror = function(error) {
            console.log("WebSocket 错误:" + error);
        };



    }
    function sendMesg(){
        var msg=$("#msg").val();
        $("#msbox").append('<div class="myclss">'+msg+'</div>')

        //发送信息到服务器
        socket.send(msg)

    }







</script>
<style>
    .myclss{
        background: #000088;
        text-align: right;
        color: #fff;
    }
    .serveclss{
        background: #660066;
        text-align: left;
        color: #fff;
    }
</style>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio开发之路 (五)导入OpenCV以及报错解决

一、步骤 官网下载opencv包&#xff08;我下的是4.7.0&#xff09;并解压&#xff0c;openvc官网 先创建一个空项目&#xff0c;简单跑一下能正常输出helloworld 点击file->new->Import Module选择解压之后的opencv-android-sdk文件夹中的SDk文件夹&#xff0c; modu…

城市管理革命,AI药方解决城市病烦恼!

引言&#xff1a;现代中文语境的“城市”是中国近代逐渐与世界接轨的舶来词语&#xff0c;根据“city”翻译而来&#xff0c;由“城”与“市”组合而成&#xff0c;其中“城”是由军事防御产生的&#xff0c;属于行政地域概念&#xff0c;“市”是由商品交换&#xff08;市场&a…

[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路

今天来公司办公&#xff0c;开机之后发现电脑出现各种问题&#xff0c;死机、卡顿、点什么都加载&#xff0c;甚至开一个文件夹要1分钟才能打开&#xff0c;花了2个小时才解决&#xff0c;走了很多弯路&#xff0c;其实早点想通&#xff0c;5分钟就能解决问题&#xff0c;所以打…

无人机甚高频无线电中继通讯U-ATC118

简介 甚高频无线电中继通讯系统使用经过适航认证的机载电台连接数字网络传输模块&#xff0c;通过网络远程控制无缝实现无人机操作员与塔台直接语音通话。无人机操作员可以从地面控制站远程操作机载电台进行频率切换、静噪开关、PTT按钮&#xff0c;电台虚拟面板与真实面板布局…

肺功能指标 fev1 frc 肺指标 呼吸参数 fev1 pre-bd

肺功能报告不会看&#xff1f;手把手教你识别各种参数&#xff01; - 丁香园 (dxy.cn) pred是predict的缩写&#xff0c;中文的解释意思为预计&#xff0c;fev1&#xff05;pred是患者做肺功能检查时体现出来。患者行肺功能检查时做最大吸气至肺总量后&#xff0c;开始做用力呼…

C++学习|CUDA编程入门

CUDA编程入门 GPU介绍CUDA 介绍NVCC——CUDA编译器cu/cuh文件——CUDA文件核函数——操作GPU线程模型——CUDA逻辑结构CUDA程序运行流程CUDA内存管理 GPU介绍 GPU&#xff08;Graphics Processing Unit&#xff0c;图形处理器&#xff0c;显卡&#xff09;&#xff1a;最早主要…

第三方电容笔支持随手写吗?开学季平价好用电容笔

作为一个苹果的忠实粉丝&#xff0c;我知道很多关于数码产品的事情。而电容笔&#xff0c;也是iPad平板的一个重要配件之一&#xff0c;许多人购买iPad后&#xff0c;都希望拥有一支好用的电容笔&#xff0c;但又不知道如何选择。本人用过30余款电容笔&#xff0c;为方便各位朋…

C++信息学奥赛1142:单词的长度

#include <iostream> #include <string> using namespace std; int main() {string str1;// 输入一行字符串getline(cin,str1);int n0;for(int i0;i<str1.length();i){if(str1[i] ){while (str1[i1] ){i; // 跳过连续的空格}cout<<n<<","…

js传参没有反应

js反应如果传的参是字符串, 则不能直接传, 需要加上双引号 下面这种是传数值的形式:

【java】【idea2023版】Springboot模块没有.iml文件的问题

目录 方法一&#xff1a; 1、首先鼠标选中对应的对应的模块 &#xff0c;按两下Ctrl键 2、project中选择对应的模块 3、运行mvn idea:module 命令​编辑 方法二&#xff1a; 1、可以右键点击open Terminal 2、然后在打开的Terminal里输入 方法一&#xff1a; 1、首先鼠…

基于HarmonyOS ArkUI实现音乐列表功能

本节将演示如何在基于HarmonyOS ArkUI的List组件来实现音乐列表功能。 本文涉及的所有源码&#xff0c;均可以在文末链接中找到。 活动主页 华为开发者论坛 规则要求具体要求如下&#xff1a; 第1步&#xff1a;观看<HarmonyOS第一课>“营”在暑期•系列直播&#x…

冠达管理股票分析:数据资产入表规定落地 算力产业化加速在即

8月22日&#xff0c;算力龙头股鸿博股份股价强势涨停。方针面上&#xff0c;财政部日前拟定印发了《企业数据资源相关管帐处理暂行规则》。业内人士表明&#xff0c;数据财物入表规则落地将极大推进数据运营变现。这能改进和优化企业的财物负债表和损益表&#xff0c;更有利于促…

Android 使用模拟器模拟Linux操作系统

1. 简介 在Android手机上使用模拟器模拟ubuntu等操作系统&#xff0c;便于测试 2. 软件准备 Termux&#xff1a;是一款 Android 终端模拟器和 Linux 环境应用程序&#xff0c;无需 root 或设置即可直接运行。虽然酷安和谷歌菜市场都能下载&#xff0c;但这些渠道都很久没更新…

YOLOv5屏蔽区域检测(选择区域检测)

YOLOv5屏蔽区域检测以及选择区域检测 前期准备labelme选择mask区域 代码改动 前期准备 思路就是通过一个mask掩膜&#xff0c;对我们想要屏蔽或者选择的区域进行遮挡处理&#xff0c;在推理的时候&#xff0c;将有mask掩膜的图像输入&#xff0c;将最后的结果显示在原始图像上…

Spring学习之【DefaultListableBeanFactory】

介绍 BeanFactory是个Factory&#xff0c;也就是IOC容器或对象工厂&#xff0c;而DefaultListableBeanFactory是Bean工厂的一个默认实现&#xff0c;DefaultListableBeanFactory提供了原始的BeanFactory的功能&#xff0c;如&#xff1a;对外提供getbean()方法&#xff0c;维护…

科技爆炸,白领办公新style,工作吩咐一声,电脑自动完成

“骂醒恋爱脑”的公司月入六七万&#xff1f;在刚刚过去的七夕&#xff0c;这个新闻可算硬核。 但对于直球程序员来说“恋爱脑”不一定存在&#xff0c;而赛博朋克级的浪漫可以说是独一份。 利用大模型&#xff0c;小帅为女友策划完美七夕&#xff0c;一声吩咐下&#xff0c;…

初识 Redis

初识 Redis 1 认识NoSQL1.1 结构化与非结构化1.2 关联和非关联1.3 查询方式1.4. 事务1.5 总结 2 Redis 概述2.1 应用场景2.2 特性 3 Resis 全局命令4 Redis 基本数据类型4.1 String4.1.1 常用命令4.1.2 命令的时间复杂度4.1.3 使用场景 4.2 Hash4.2.1 常用命令4.2.2 命令的时间…

这个实用连锁店高效技巧,让便利店工作更省心!

当今社会&#xff0c;随着科技的不断进步&#xff0c;视频监控技术正逐渐渗透到我们生活的方方面面。无论是在公共场所、商业建筑、交通系统还是家庭环境&#xff0c;我们都可以见到摄像头的身影。 对于连锁企业而言&#xff0c;视频监控已经成为一项不可或缺的管理工具&#x…

抖音seo短视频矩阵系统源代码开发原型--开源

一、系统设计 1.需求分析 抖音SEO矩阵系统的主要功能是提高视频的曝光和排名&#xff0c;因此&#xff0c;其主要需求包括&#xff1a; 1&#xff09;关键词研究&#xff1a;通过分析用户搜索行为&#xff0c;挖掘出热门关键词&#xff0c;以便制定针对性的SEO策略。 2&…

无需繁琐算量计算,鹏业安装算量软件帮你搞定!

亲爱的朋友们&#xff0c;大家好&#xff01;今天非常高兴为大家带来一款极具智能、专业和效率的算量神器——鹏业安装算量软件&#xff01;这款软件将彻底改变你的算量工作方式&#xff0c;让你轻松完成各种预算、审计和施工任务。 首先&#xff0c;鹏业安装算量软件自动识别图…