PHP+Swoole 搭建 Websocket 聊天室

PHP Swoole实现简易聊天室,附加小程序端连接websocket简易代码 通过php的Swoole和redis来实现简易websocket功能,搭建简易聊天室 阅读详情

1.这里用的线上服务器宝塔

先建立一 .php文件

 2.到swoole官网Swoole4 文档

3.前端测试连接

先打开进入文件所在的目录

 

 wx.connectSocket({
      url: 'ws://域名:9502',  在微信公众平台进行绑定
    })

 小程序

 4.前端渲染

<view wx:for="{{list}}" wx:key="index">
  <view class="{{item.class}}">{{item.message}}</view>
  <!-- <view>you</view> -->
</view>
<view>
  <view><input type="text" bindinput="getMsg" placeholder="请输入内容"/></view>
  <button bindtap="sendMsg">发送</button>
</view>

5.js页面

// pages/swo/swo.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    list:[]
  },
  getMsg(c){
    this.setData({
      message:c.detail.value
    })
  },
  snedMsg(c){
    let send = {
      to:'a',
      my:'b',
      type:'send',
      data:this.data.message
    }
    this.send(JSON.stringify(send));
    this.webSockertXin(6000,false)
    let list = this.data.list
    list.push({
      class:'my',
      message:this.data.message
    })
    this.setData({
      list:list
    })
  },
  send(data){
    wx.sendSocketMessage({
      data: data,
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    wx.connectSocket({
      url: 'ws://swoole.ckl.ink:9502',
    })
    this.webSockertXin()
    wx.onSocketOpen((result) => {
      let send = {
        to:'a',
        my:'b',
        type:'open'
      }
      this.send(JSON.stringify(send))
    })
    wx.onSocketMessage((result) => {
      console.log(result)
      let message = JSON.parse(result.data)
      console.log(message.message)
      let list = this.data.list
      list.push({
        class:'you',
        message:message.message
      })
      this.setData({
        list:list
      })
    })
  },
  webSockertXin(time = 6000,state = true){
    let timer
    if(state == true){
      let timer = setInterval(function(){
        console.log('当前心跳已连接');
        wx.sendSocketMessage({
          data: JSON.stringify({
            type:'active'
          }),
          fail(res){
            wx.closeSocket()
            wx.showToast({
              title: '当前聊天已断开',
              icon:'none'
            })
            clearInterval(timer)
            console.log('当先心跳已关闭')
          }
        })
      },time);
    }else{
      clearInterval(timer);
      console.log('当前心跳已关闭')
    }
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    wx.closeSocket();
  },


})

6.wxss页面

.my{
  text-align: right;
}

 7.配置文件

<?php
    //创建WebSocket Server对象,监听0.0.0.0:9502端口
    $ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);
    
    $redis = new Redis();
    $redis->connect('127.0.0.1','6379');
    //监听WebSocket连接打开事件
    $ws->on('Open', function ($ws, $request) {
        // $ws->push($request->fd, "连接上了!!!\n");
    });
    
    //监听WebSocket消息事件 
    $ws->on('Message', function ($ws, $frame) use($redis) {
        $data = json_decode($frame->data,true);
        switch ($data['type']) {
            case 'open':
                $redis->set($data['my'],$frame->fd);
                break;
            case 'send':
                $to = $redis->get($data['to']);
                // print_r($to);
                $message = [
                    'message' => $data['data']
                ];
                // print_r($message);
                $ws->push($to,json_encode($message,true));
                break;
            case 'active':
                echo '当前心跳已重新连接';
                break;
            default:
                // code...
                break;
        }
        // echo "Message: {$frame->data}\n";
        // $ws->push($frame->fd, "server: {$frame->data}");
    });
    
    //监听WebSocket连接关闭事件
    $ws->on('Close', function ($ws, $fd) {
        echo "client-{$fd} is closed\n";
    });
    
    $ws->start();


7.另一端跟上面的一样复制一份将接收信息者调换就行了

 8.下面是心跳检测

 /**
   * 监听websocket心跳连接的方法
   */
  webSocketXin(time = 60000, status = true) {
    var timing;
    if (status == true) {
      timing = setInterval(function () {
        console.log("当前心跳已重新连接");
        //循环执行代码
        wx.sendSocketMessage({
          data: JSON.stringify({
            type: 'active'
          }),
          fail(res) {
            //关闭连接
            wx.closeSocket();
            //提示
            wx.showToast({
              title: '当前聊天已断开',
              icon: 'none'
            });
            clearInterval(timing);
            console.log("当前心跳已关闭");
          }
        });
      }, time) //循环时间,注意不要超过1分钟
    } else {
      //关闭定时器
      clearInterval(timing);
      console.log("当前心跳已关闭");
    }
  }

二例

<?php

//创建WebSocket Server对象,监听0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9521);

//监听WebSocket连接打开事件
$ws->on('Open', function ($ws, $request) use ($chatMessagesKey, $roomUserKey, $roomOnlinesKey) {
    echo $request->fd . '我连接上了';
});

//监听WebSocket消息事件
$ws->on('Message', function ($ws, $frame) {
    print_r($frame);
    //把前台传过来的json字符串转成数组
    $params = json_decode($frame->data, true);
    //判断是否是心跳消息,如果是心跳消息
    if (isset($params['type']) && isset($params['type'])=='active'){
        echo '这是心跳监听消息';
    }else{
         //先判断当前用户有没有正在连接
        if (isset($params['uid']) && !empty($params['uid'] == 666)) {
            //用户表查询当前用户  fd
            $fd = 2;
        } else {
            $fd = 1;
        }
        //客服id
        $ws->push($fd, json_encode($params, JSON_UNESCAPED_UNICODE));
    }
});

//监听WebSocket连接关闭事件
$ws->on('Close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();

宝塔环境fastadmin使用swoole创建websocket服务并开启wss支持 阅读详情

相关推荐

宝塔 搭建 swoole 聊天

lsof -i :9501 这个命令 查看端口 占用进程 然后用 kill 终止查看到的进程id 就可以了。首先开放阿里云9501端口 跟 宝塔的9501端口 才可以 因为刚开始的时候没有开放端口报错了好久蒙蔽了。然后在项目根目录里面随便创建一个swoole.php 我是随便创建了一个大家随意。开两个页面 一个张三 一个李四 就可以通信了 简单方便。然后运行自己的swoole.php 启动起来。全部开放以后就不会出现防火墙等网络类的报错。然后可以写一个html 来写页面。

lzc147258的博客 1077

PHP-swoole搭建websocket服务

五、搭建websocket服务 5.1、简介 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 websocket解决服务器端与...

逍遥云恋 1388

php swoole4 用WebSocket服务器搭建一个简易的聊天室功能

还不会安装swoole的同学可以看我另一篇文章 https://blog.youkuaiyun.com/qq_36303853/article/details/119947572 准备 一个配置好ssl证书的域名 一台服务器 实现 1.给域名配置ssl证书 可以看我另一篇文章:https://blog.youkuaiyun.com/qq_36303853/article/details/106571227 注:如果ssl证书配置了没有生效大概率是你宝塔或者阿里云没有开放443端口,注意检查一下 2.分别开放宝塔、阿里云对应.

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 847

Tp6中运用swoole增加Room聊天室等功能

Tp6增加Room聊天室功能

代码存储室 2221

Swoole实战:构建高性能聊天室功能

Swoole是一个为PHP开发人员提供的高性能网络通信引擎。最初,它由Laruence于2014年发起,旨在解决PHP网络编程中遇到的性能瓶颈。它实现了异步非阻塞IO、多线程、协程等高级特性,这些特性使得PHP能够开发出高并发的网络应用。

weixin_42323064的博客 570

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1617

告别PHP-FPM!用LaravelS+Swoole在Nginx下搭建WebSocket聊天室(含完整配置)

本文详细介绍了如何利用LaravelS和Swoole替代PHP-FPM,构建高性能的WebSocket聊天室服务。通过环境准备、Nginx配置迁移、WebSocket服务实现及生产环境优化等步骤,帮助开发者提升实时应用的性能和并发能力,特别适合聊天应用和实时通知场景。

weixin_30836759的博客 449

运放电路实战:5分钟搞定加法器与减法器的电路设计与调试(附避坑指南)

本文从实战角度出发,详细讲解了运算放大器加法器与减法器的电路设计与调试方法。针对加法器,重点分析了利用“虚地”特性简化设计和选型要点;对于减法器,则深入剖析了决定精度的核心——电阻匹配问题,并提供了使用电阻网络等提升共模抑制比的实用策略。文章还分享了从仿真到实物焊接的完整流程与常见避坑技巧,帮助电子爱好者快速掌握这两种基础运放电路。

weixin_28323057的博客 469

php swool 聊天室,swoole简单的聊天室demo(修正版)

搜了一下,以前的很多类型文章,都是可能采集的,基本一样,错误都一样,所以自己写了个,发来共享一下。咱们可是抄袭文档还有互联网的,请确保你的服务器已经安装swoole1.7.7+版本扩展,9502端口未占用而且可以开启效果:swoole.html页面swoole chat roomif(window.WebSocket){var webSocket = new WebSocket("ws://101...

weixin_39836860的博客 465

springcloud+nacos+gateway+oauth2小聚会

在微服务工程中,Nacos作为目前主流的注册中心和配置中心,Spring Cloud Gateway作为目前主流的网关,下面引入spring security+oauth2+jwt作为认证和授权中心,进行简单的聊聊。

ldcaws的专栏 2647

Python爬虫案例:从39问医生网爬取口腔科的在线问答记录(单轮问答)

本次实验爬取39问医生网中口腔科分类下的所有在线单轮问答记录,每页32条,共100页,总数据量为3200条,最终结果以excel格式保存。

JieBao11的博客 1645

Swoole + websocket 实现简易版网页聊天室

使用swoole 的websocket + table ,websocket 负责与前JS 进行通信,table 则负责记录用户信息,实现进程间的数据共享 Css 原文链接 Swoole + websocket 实现简易版网页聊天室

高雷 617

120、NPU的Mythic M1076:模拟存算一体NPU

这篇文章分享了作者调试Mythic M1076模拟存算一体NPU的实战经验,主要包含以下要点: 硬件设计陷阱:参考电压输入必须使用低ESR电容,普通贴片电容会导致模拟计算阵列工作异常。 核心技术原理: 采用真正的存算一体架构,将权重存储为模拟电压 使用浮栅晶体管存储权重,通过电流叠加实现乘法运算 包含108个计算单元阵列(Tile),每个256×256规模 使用注意事项: 编程模型特殊,需要依赖SDK自动映射网络层 存在6-8位有效精度限制,需用量化感知训练 功耗特性独特,静态偏置电流占主要功耗 调试手段有

m0_50546716的博客 125

swoole用WebSocket服务器搭建一个简易的聊天室功能

swoole用WebSocket服务器搭建一个简易的聊天室功能域名无ssl加密域名有ssl加密开启服务端常链接浏览器分别开启两个客户端窗口,进行聊天 域名无ssl加密 WS.php写服务端代码 <?php class WS{ private $ws = null; public function __construct(){ //创建WebSocket Server对象,监听0.0.0.0:9502端口 $this->ws = new S

wgchen 722

学Simulink--决策规划场景实例:基于Simulink的智能车辆行为决策仿真

本文基于Simulink平台构建智能车辆变道决策仿真系统,采用MOBIL算法实现"决策-规划-执行"全流程。系统包含自车动力学模型、环境感知模块(含5%噪声)、决策控制器和轨迹规划模块,通过五次多项式实现平滑变道。仿真验证了三种典型工况:正常变道(成功率100%)、邻车拒绝让行和紧急避障,各项指标均满足要求(TTC>3s,横向加速度<2m/s²,决策周期<100ms)。文章详细介绍了建模步骤、核心算法实现和参数配置方法,并提出了强化学习、多车协同等优化方向。该模型为智能

amy_mhd的博客 153

CE电流法测试中的dBμV负值解析

传导发射(CE)电流法测试中出现的dBμV负值现象表明被测设备干扰电平低于1μV参考基准。这源于对数计算特性(小于1μV的电压转换后为负值)、设备优良的EMC设计(如滤波效果显著)及测试环境的影响(LISN隔离、屏蔽室低噪声)。负值虽不代表实际负电压,但反映干扰水平优于标准限值,为系统集成预留电磁裕度。工程应用中需结合设备灵敏度、环境背景噪声等因素综合分析,避免误判,这类数据可用于评估EMI设计冗余度。

硬核科技 298

开发业务(3)——swoole和聊天室入门开发

swoole开发多人聊天室

大梁来了的博客 618

【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知

Docker的监控,可以使用Docker自带的stats命令来获取当前主机上运行中的容器的资源使用情况。 例如:容器的CPU使用率、内存占用、网络IO以及磁盘IO等指标。

景天科技苑 6万+

Swoole实现基于WebSocket的群聊私聊

本文属于入门级文章,大佬们可以绕过啦。如题,本文会实现一个基于Swoole的websocket聊天室(可以群聊,也可以私聊,具体还需要看数据结构的设计)。 搭建Swoole环境 通过包管理工具 # 安装依赖包 $ sudo apt-get install libpcre3 libpcre3-dev # 安装swoole $ pecl install swoole # 添加extensio...

更上一层楼! 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

swoole + 浏览器webSocket 实现的聊天室

这两天在学习swoole,作为练手弄了个swoole + 浏览器webSocket 实现的聊天室,效果如下: 环境:php7.3 swoole4.4.3 hredis 参考代码下载地址https://download.youkuaiyun.com/download/shenymce/11565378 WebScketServer.php文件 <?php namespace App\...

shenymce的专栏 499

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PHP+Swoole实现webScoket即时聊天

一、前端页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>在线聊天室</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="css/r

1471

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

用PHP+swoole+html前台页面做简单的聊天室

最近自学了swoole,想做点东西试试看,刚好看到可以简单做个聊天室,于是自己研究研究搞了一个。 php文件 <?php //创建WebSocket Server对象,监听0.0.0.0:9502端口 $ws = new Swoole\WebSocket\Server('0.0.0.0', 9502); //监听WebSocket连接打开事件 $ws->on('Open', function ($ws, $request) { $ws->push($re...

YoungSuAng的博客 468

微信小程序+php+swoole极速实现群聊

最近突然想做一个php实时通讯 我就点开了这个 WebSocket 我看了看官网的demo,觉得看起来很简单嘛, //官网demo $server = new swoole_websocket_server("0.0.0.0", 9501); $server->on('open', function (swoole_websocket_server $server, $re

baidu_36030459的博客 9147

Laravel + Swoole 打造IM简易聊天室

应用场景:实现简单的即时消息聊天室. (Linux + centos + php + nginx + mysql + redis)环境 一、扩展安装 pecl install swoole 安装完成后可以通过以下命令检测Swoole是否安装成功 php -m 二、webSocket服务端代码 我们需要通过Laravel Command来实现,因为Swoole只能运行在PHP CLI模式下 1.生成Command类 php artisan make:command SwooleServer 2.编写webS

weixin_45310179的博客 1276

原生php写简单的聊天室

Websocket.php <?php $ws_server = new swoole_websocket_server('此处是你的域名/ip',端口号); //设置server运行时的参数 $ws_server->set(array( 'daemonize' => true, //是否作为守护进程 'log_file' => __DIR__ .'/logs/web_socket.log' //存放聊天记录日志 )); //监听WebSocket连接打开事件

weixin_46047399的博客 4066

swoole简单的聊天室demo(修正版)

搜了一下,以前的很多类型文章,都是可能采集的,基本一样,错误都一样,所以自己写了个,发来共享一下。 咱们可是抄袭文档还有互联网的,请确保你的服务器已经安装swoole1.7.7+版本扩展,9502端口未占用而且可以开启 swoole文档:https://wiki.swoole.com/wiki/... 效果: swoole.html页面 ...

weixin_34161064的博客 217
上一篇: laravel 实现ES高亮搜索
下一篇: laravel 8 通过 任务调度 实现 数据库备份
陈卿诺语
博客等级 码龄5年 167粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值