返回顶部
分享到

PHP调用Workerman5.0实现一对一聊天

php 来源:互联网 作者:佚名 发布时间:2025-06-04 21:40:50 人浏览
摘要

要实现一对一聊天功能,使用 Workerman 5.0 作为后端,前端可以使用 WebSocket 进行通信。以下是实现步骤和代码示例。 1. 安装 Workerman 首先,确保你已经安装了 Workerman。可以通过 Composer 安装:

要实现一对一聊天功能,使用 Workerman 5.0 作为后端,前端可以使用 WebSocket 进行通信。以下是实现步骤和代码示例。

1. 安装 Workerman

首先,确保你已经安装了 Workerman。可以通过 Composer 安装:

1

composer require workerman/workerman

2. 后端代码

创建一个 PHP 文件(例如 chat_server.php),用于处理 WebSocket 连接和消息传递。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

<?php

require_once __DIR__ . '/vendor/autoload.php';

 

use Workerman\Worker;

use Workerman\Connection\TcpConnection;

 

// 创建一个 WebSocket 服务器

$ws_worker = new Worker("websocket://0.0.0.0:2346");

 

// 保存用户连接的数组

$users = [];

 

// 当有客户端连接时

$ws_worker->onConnect = function(TcpConnection $connection) use (&$users) {

    echo "New connection\n";

};

 

// 当有客户端发送消息时

$ws_worker->onMessage = function(TcpConnection $connection, $data) use (&$users) {

    $message = json_decode($data, true);

 

    if (isset($message['type'])) {

        switch ($message['type']) {

            case 'login':

                // 用户登录,保存连接

                $users[$message['user_id']] = $connection;

                $connection->user_id = $message['user_id'];

                echo "User {$message['user_id']} logged in\n";

                break;

 

            case 'chat':

                // 一对一聊天

                if (isset($users[$message['to_user_id']])) {

                    $users[$message['to_user_id']]->send(json_encode([

                        'type' => 'chat',

                        'from_user_id' => $connection->user_id,

                        'message' => $message['message']

                    ));

                }

                break;

        }

    }

};

 

// 当客户端断开连接时

$ws_worker->onClose = function(TcpConnection $connection) use (&$users) {

    if (isset($connection->user_id)) {

        unset($users[$connection->user_id]);

        echo "User {$connection->user_id} disconnected\n";

    }

};

 

// 运行 worker

Worker::runAll();

3. 前端代码

在前端,使用 WebSocket 连接到服务器,并实现登录和发送消息的功能。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>WebSocket Chat</title>

</head>

<body>

    <div>

        <input type="text" id="user_id" placeholder="Your User ID">

        <button onclick="login()">Login</button>

    </div>

    <div>

        <input type="text" id="to_user_id" placeholder="To User ID">

        <input type="text" id="message" placeholder="Message">

        <button onclick="sendMessage()">Send</button>

    </div>

    <div id="chat"></div>

 

    <script>

        let ws;

        let user_id;

 

        function login() {

            user_id = document.getElementById('user_id').value;

            ws = new WebSocket('ws://127.0.0.1:2346');

 

            ws.onopen = function() {

                ws.send(JSON.stringify({

                    type: 'login',

                    user_id: user_id

                }));

            };

 

            ws.onmessage = function(event) {

                const message = JSON.parse(event.data);

                if (message.type === 'chat') {

                    document.getElementById('chat').innerHTML += `<p>From ${message.from_user_id}: ${message.message}</p>`;

                }

            };

        }

 

        function sendMessage() {

            const to_user_id = document.getElementById('to_user_id').value;

            const message = document.getElementById('message').value;

            ws.send(JSON.stringify({

                type: 'chat',

                to_user_id: to_user_id,

                message: message

            }));

        }

    </script>

</body>

</html>

4. 运行服务器

在终端中运行 PHP 文件启动 WebSocket 服务器:

1

php chat_server.php start

5. 测试

打开两个浏览器窗口,分别输入不同的用户 ID 并登录。

在一个窗口中输入目标用户 ID 和消息,点击发送。

另一个窗口应该会收到消息并显示在页面上。

总结

通过以上步骤,你可以实现一个简单的一对一聊天系统。Workerman 作为后端处理 WebSocket 连接和消息传递,前端通过 WebSocket 与服务器通信,实现实时聊天功能。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • PHP调用Workerman5.0实现一对一聊天
    要实现一对一聊天功能,使用 Workerman 5.0 作为后端,前端可以使用 WebSocket 进行通信。以下是实现步骤和代码示例。 1. 安装 Workerman 首先,确
  • PHP跨文件传递参数的8种常见方法
    以下是 PHP 中跨文件传递参数的8 种常见方法,按场景和安全性分类整理,附详细说明和示例代码: 一、超全局变量(适合请求间数据共享)
  • PHP+HTML实现流式输出效果的示例

    PHP+HTML实现流式输出效果的示例
    效果演示 后端代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ?php // 关闭输出缓冲 ini_set(output_bu
  • 在PHP中使用__dir__的详细介绍
    __DIR__ 可以用来获取当前代码工作目录。它从PHP 5.3版本开始引入。它类似于使用 dirname(__FILE__)。通常用于包含其他文件,这些文件存在于一
  • 使用Webman构建高效的音频流媒体应用程序的介绍
    Webmen是一个基于Node.js的Web框架,它提供了一套强大的工具和库,用于构建高效的Web应用程序。它采用了异步和非阻塞的方式处理客户端请求
  • PHP中利用百度地图API实现地图热区的响应效果教
    在开发网站或应用程序时,我们经常会需要在地图上展示热区的信息,这种热区可以是指定区域内的热门活动、人流密集的地方等。百度地
  • PHP打包部署的实践全过程解析
    一、引言 随着项目规模的增大,传统的手动部署方式已经不能满足需求,代码过程繁琐、易出错且效率低下。因此,自动化打包和部署成为
  • PHP数据加密方式的总结

    PHP数据加密方式的总结
    首先我们来了解一下为什么要加密? 在网络通信的过程中攻击者可以伪造请求和返回,从而达到不可告人的目的。如下图所示: 数据加密之
  • PHP四种统计在线人数方式介绍

    PHP四种统计在线人数方式介绍
    1 用表统计方式 用数据表统计在线人数,这种方式只能用在并发量不大的情况下。 首先我们先新建表:user_login 编辑 user_login 表 模拟用户登
  • PHP获取系统毫秒数时间方法
    前言 php中获取时间方法是date(),在php中获取时间戳方法有time()、strtotime(); date():date(format, timestamp),format为格式、timestamp为时间戳(可选
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计