实时通信的「聊天室」源码,Ctrl+c/v就可以用!!!

简介: 还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群

workman 是高性能socket服务框架 、底部技术群交流

首先,我在这里声明非常重要一点,观看这篇文章一定要知道,这个实现是一款 workerman+socket+php 制作的一款「简陋web聊天室」,没有任何样式、功能也是很单一(实时通信,群发,下线提醒)。写这个目的为学习workman、swoole的朋友一个简单参考方案。因此无脑键盘,切记~~~

workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。

workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行

第1步

下载workerman

workerman下载地址:https://www.workerman.net/download

image.gif

第2步

创建目录、以及复制代码

将workerman框架用编辑器打开,然后在它同级目录下创建一个php文件,比如index.php,然后将我下面的代码全部复制,粘贴到这个index.php中。

<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman-master/Autoloader.php';
// 创建一个websocket的Worker监听2000接口
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// 只启动1个进程,这样方便客户端之间传输数据
$ws_worker->count = 1;
//模拟登陆,设用户id
$global_uid = 0;
// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
$ws_worker->onConnect = function ($connection)
{
    global $ws_worker, $global_uid;
    // 为这个连接分配一个uid
    $connection->uid = ++$global_uid;
};
// 当客户端发送消息过来时,转发给所有人
//这里data☞用户发送过来的数据
$ws_worker->onMessage =function($connection, $data)
{
    global $ws_worker;
    //循环用户id,并发送信息
    foreach($ws_worker->connections as $conn)
    {
        //给用户发送信息
        $conn->send("用户id[{$connection->uid}] 说: $data");
    }
};
// 当客户端断开时,广播给所有客户端
$ws_worker->onClose=function($connection)
{
    global $ws_worker;
    //循环用户id,并发送信息
    foreach($ws_worker->connections as $conn)
    {
        //给用户发送信息
        $conn->send("用户id[{$connection->uid}] 断开链接");
    }
};
// 运行worker
Worker::runAll();

image.gif

第3步

启动socket服务

打开cmd到项目的根目录以cli的方式运行PHP文件(注:windows下需要配置php环境变量),启动服务即可。

网络异常,图片无法展示
|
image.gif 编辑

第4步

复制前端代码

然后创建一个html页面,将我下面代码在复制到这个html页面中,这里html引入了boot cdn的vue,直接将域名指向创建的html页。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="app">
    <ul>
        <li v-for = "v in data">{{v}}</li>
    </ul>
    <!--@submit代表表单提交后执行一个叫onsub的方法-->
    <!--prevent代表阻止表单提交-->
    <form @submit.prevent = "onSub">
        <input type="text" v-model = "content">
        <input type="submit" value="提交">
    </form>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.common.dev.js"></script>
<script>
    let ws = new WebSocket("ws://127.0.0.1:2000");
    let app = new Vue({
        el : "#app",
        data : {
            data:[],
            content : '',
        },
        created : function(){//created创建vue实例后执行的第一个方法
            //message接收php workman发送过来的数据
            ws.onmessage = function (ev) {
                //将值传入的data数组中
                this.data.push(ev.data);
            }.bind(this);
        },
        methods:{
            onSub : function () {
                //发送给php workman
                ws.send(this.content);
            }
        }
    })
</script>
</body>
</html>

image.gif

第5步

开启浏览器浏览

然后同时以两个不同的浏览器打开html就可以看到输入的同步信息的效果了。对方关闭当前页面也会提示。(注:cmd窗口不要关闭)

image.gif编辑

image.gif编辑

————————end————————

WeChat微信群交流「WeChat:xzzs730」

相关文章
|
4月前
|
人工智能 机器人 Linux
OpenClaw全自动漫剧工作流搭建:钉钉AI表格+Seedance2.0全流程部署指南
本文完整呈现基于OpenClaw(Clawdbot)搭建**全自动漫剧生成系统**的全流程,包含阿里云服务器、本地MacOS/Linux/Windows11三端部署方法、阿里云百炼Coding Plan免费大模型API配置、钉钉机器人接入、钉钉AI表格Skill集成、Seedance2.0视频生成联动,以及定时任务、数据抓取、脚本生成、视频输出的完整自动化方案。所有步骤均提供可直接复制的代码命令,全程无营销内容、无冗余步骤,适合零基础用户搭建属于自己的7×24小时漫剧自动化生产线。
3107 5
|
人工智能 移动开发 前端开发
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
蚂蚁团队推出的AI前端研发平台WeaveFox,能够根据设计图直接生成前端源代码,支持多种应用类型和技术栈,提升开发效率和质量。本文将详细介绍WeaveFox的功能、技术原理及应用场景。
7615 68
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
|
网络协议 小程序 物联网
Gateway-Worker启动失败或者启动无法正常使用的几种方法
Workerman是一款开源高性能异步PHP socket即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议
719 3
|
网络协议 安全 网络安全
免费申请 HTTPS 证书的八大方法
免费申请 HTTPS 证书的八大方法
14893 0
|
网络协议 前端开发 关系型数据库
【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯
上述为之前给公司做内部通讯软件时个人整理内容,水平有限,如有错误之处,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注!谢谢~๑•́₃•̀๑ [鲜花][鲜花][鲜花]
828 0
|
开发工具 git
git报错 Unable to create ‘D:/project/xxx/.git/index.lock‘: File exists.
git报错 Unable to create ‘D:/project/xxx/.git/index.lock‘: File exists.
2371 1
网站:推荐几款好用的在线短链生成工具
短链技术目前对网站推广非常的有用,有了它就可以把非常长的网址缩短。这样分享推广起来非常方便。今天小编给大家推荐几款不错的在线短链生成网站,感兴趣的朋友可以下载试一试!
网站:推荐几款好用的在线短链生成工具
|
Linux PHP Docker
Windows下PHP微服务框架Hyperf Swoole开发部署(Docker方式)
Windows下PHP微服务框架Hyperf Swoole开发部署(Docker方式)
1619 0
Windows下PHP微服务框架Hyperf Swoole开发部署(Docker方式)
|
存储 数据安全/隐私保护
Alist ——本地网盘管理器(上)
Alist ——本地网盘管理器
|
前端开发
静默授权与主动授权区别、使用场景以及常见问题。
静默授权与主动授权对于用户来说的区别 静默授权用户是没有感知的,实际商户是悄悄的就把用户的user_id(PID)获取到 主动授权用户是有感知的并且需要用户去进行点击授权确定按钮的,用户如果不经授权的话,商户是拿不到用户的信息的。
8608 12