返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Ratchet实现PHP WebSocket多人聊天功能的示例
  • 786
分享到

Ratchet实现PHP WebSocket多人聊天功能的示例

phpwebsocket开发语言 2023-08-31 21:08:03 786人浏览 薄情痞子
摘要

   composer 安装ratchet composer require cboden/ratchet 使用PDO连接数据库,创建Mysql命令如下 CREATE TABLE messages ( id INT AUTO_INC

  

  • composer 安装ratchet
    composer require cboden/ratchet
  • 使用PDO连接数据库,创建Mysql命令如下
    CREATE TABLE messages (    id INT AUTO_INCREMENT PRIMARY KEY,    message TEXT NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
  • 使用Redis存储消息列表

这个示例代码中,PHP代码使用Ratchet来创建websocket服务器,并实现了简单的聊天功能。html代码使用javascript来建立WEBSocket连接,并处理消息传输和用户输入。要运行此代码,请确保已安装Ratchet并在终端中运行php文件。然后,通过打开浏览器并访问HTML代码所在的地址,就可以开始聊天了。

 在onMessage方法中,我们首先将接收到的消息存入Redis列表中。然后,如果Redis中的消息数量超过1000,则将所有消息取出并依次存入mysql中。请注意,在Mysql中执行多个INSERT语句时,最好使用事务(即BEGIN、COMMIT语句)来确保数据的完整性。

 WebSocket服务端代码:

clients = new \SplObjectStorage;        // 连接到数据库        $dsn = 'mysql:host=localhost;dbname=chat';        $username = 'root';        $password = '';        $options = [            \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC        ];        $this->pdo = new \PDO($dsn, $username, $password, $options);        // 连接到 Redis        $this->redis = new \Redis();        $this->redis->connect('localhost', 6379);    }    public function onOpen(ConnectionInterface $conn)    {        $this->clients->attach($conn);        echo "New connection! ({$conn->resourceId})\n";    }    public function onMessage(ConnectionInterface $from, $msg)    {        foreach ($this->clients as $client) {            if ($from !== $client) {                $client->send($msg);            }        }        // 将消息存入 Redis        $this->redis->rpush('messages', $msg);        // 如果 Redis 中的消息数量超过 1000,则将消息存入数据库        if ($this->redis->llen('messages') > 1000) {            $messages = $this->redis->lrange('messages', 0, -1);            // 开始事务            $this->pdo->beginTransaction();            foreach ($messages as $message) {                // 将消息存入数据库                $stmt = $this->pdo->prepare('INSERT INTO messages (message) VALUES (?)');                $stmt->execute([$message]);                // 从 Redis 中删除已经存入数据库的消息                $this->redis->lpop('messages');            }            // 提交事务            $this->pdo->commit();        }    }    public function onClose(ConnectionInterface $conn)    {        $this->clients->detach($conn);        echo "Connection {$conn->resourceId} has disconnected\n";    }    public function onError(ConnectionInterface $conn, \Exception $e)    {        echo "An error has occurred: {$e->getMessage()}\n";        $conn->close();    }}$webSocketServer = new \Ratchet\WebSocket\WsServer(new Chat());$server = \Ratchet\Server\IoServer::factory(    new \Ratchet\Http\HttpServer($webSocketServer),    8080);$server->run();

 开启socket服务命令,假设php文件名为socket.php

php ./socket.php

 HTML代码:

        WebSocket Chat    

保证WebSocket服务一直开启,可以使用一个常驻进程管理工具supervisor,使用supervisor的示例配置链接

来源地址:https://blog.csdn.net/mangobot/article/details/130506974

--结束END--

本文标题: Ratchet实现PHP WebSocket多人聊天功能的示例

本文链接: https://lsjlt.com/news/387098.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Ratchet实现PHP WebSocket多人聊天功能的示例
       composer 安装ratchet composer require cboden/ratchet 使用PDO连接数据库,创建mysql命令如下 CREATE TABLE messages ( id INT AUTO_INC...
    99+
    2023-08-31
    php websocket 开发语言
  • javaGUI实现多人聊天功能
    本文实例为大家分享了javaGUI实现多人聊天的具体代码,供大家参考,具体内容如下 服务器 package com.ff.chat.chatserver.frame; import...
    99+
    2024-04-02
  • SpringBoot+WebSocket实现多人在线聊天案例实例
    目录1.pom.xml2.消息实体类3.controller4.WebSocket的配置文件5.前端发送消息页面6.测试6.1.客户端A6.2.客户端B1.pom.xml <x...
    99+
    2024-04-02
  • Redis实现多人多聊天室功能
    本文为大家分享了Redis支持多人多聊天室功能的设计代码,供大家参考,具体内容如下 设计原理 左边的一个数据域,代表两个聊天室,聊天室id分别是827,729 在聊天室827里,有2个人,分别是jaso...
    99+
    2022-06-04
    多人多 聊天室 功能
  • Vue+Websocket简单实现聊天功能
    本文实例为大家分享了Vue+Websocket简单实现聊天功能的具体代码,供大家参考,具体内容如下 效果图: 聊天室 此篇文章是针对Websocket的简单了解和应用,利用Node...
    99+
    2024-04-02
  • vue实现websocket客服聊天功能
    本文章主要介绍如何实现一个基本的聊天,后续会添加表情包,传照片等功能 其实刚开始接触的时候,我最大的疑惑是聊天功能的前期是否需要搭建什么框架、下载一些什么东西之类的,结果就是,其实w...
    99+
    2024-04-02
  • Springboot+WebSocket实现在线聊天功能
    目录一、后端二、Websocket三、前端一、后端 1.在Springboot项目的pom.xml中添加依赖 <!--websocket协议--> <depende...
    99+
    2023-02-14
    Springboot WebSocket在线聊天 Springboot WebSocket聊天 Springboot WebSocket
  • Java多线程实现多人聊天室功能
    本文为大家分享了Java多线程实现多人聊天室功能的具体代码,供大家参考,具体内容如下 1.实验目的: 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗...
    99+
    2024-04-02
  • java使用UDP实现多人聊天功能
    使用UDP实现简单聊天功能,供大家参考,具体内容如下 使用UDP实现一个简单的多人聊天功能。该程序使用了多线程,实现了聊天功能。 package 课后作业.E103_10_聊天; ...
    99+
    2024-04-02
  • C#基于Socket实现多人聊天功能
    本文实例为大家分享了C#基于Socket实现多人聊天功能的具体代码,供大家参考,具体内容如下 服务器 服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。 代码: u...
    99+
    2024-04-02
  • 使用php开发Websocket,实现即时聊天功能
    使用PHP开发Websocket,实现即时聊天功能Websocket是一种全双工通信协议,适用于实时通信场景,比如即时聊天、实时数据更新等。PHP作为一种流行的服务器端编程语言,也可以通过相关库和扩展来实现Websocket功能。在本文中,...
    99+
    2023-12-09
    PHP开发 Websocket实现 即时聊天功能
  • 基于websocket的聊天功能怎么实现
    本篇内容主要讲解“基于websocket的聊天功能怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于websocket的聊天功能怎么实现”吧!   一...
    99+
    2024-04-02
  • Java Socket+多线程实现多人聊天室功能
    本文实例为大家分享了Java Socket+多线程实现多人聊天室的具体代码,供大家参考,具体内容如下 思路简介 分为客户端和服务器两个类,所有的客户端将聊的内容发送给服务器,服务器接...
    99+
    2024-04-02
  • C#使用WebSocket实现聊天室功能
    WebSocket介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 在WebSocket API中,浏览器和服务器只需要做一个握手的动作...
    99+
    2024-04-02
  • C#基于WebSocket实现聊天室功能
    本文实例为大家分享了C#基于WebSocket实现聊天室功能的具体代码,供大家参考,具体内容如下 前面两篇温习了,C# Socket内容 本章根据Socket异步聊天室修改成WebS...
    99+
    2024-04-02
  • vue使用WebSocket模拟实现聊天功能
    效果展示 两个浏览器相互模拟 1.创建模拟node服务 在vue根目录下创建 server.js 文件模拟后端服务器 **在server终端目录下载 ** npm insta...
    99+
    2024-04-02
  • java使用udp实现简单多人聊天功能
    本文实例为大家分享了udp实现简单的多人聊天功能,供大家参考,具体内容如下 多个客户端向服务器发送信息,服务端再将信息返回到各个客户端。 这是接收udp的实现类: public cl...
    99+
    2024-04-02
  • C#如何基于Socket实现多人聊天功能
    这篇文章主要介绍C#如何基于Socket实现多人聊天功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下服务器服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。代码:using ...
    99+
    2023-06-29
  • golang实现一个简单的websocket聊天室功能
    基本原理: 1.引入了 golang.org/x/net/websocket 包。 2.监听端口。 3.客户端连接时,发送结构体: {"type":"login","uid":"我是...
    99+
    2024-04-02
  • Django实现WebSocket在线聊天室功能(channels库)
    1.Django实现WebSocket在线聊天室 1.1 安装 pip install channels==2.3 (saas) F:\Desktop\Python_Study\...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作