当前位置: 首页 > news >正文

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

要实现一对一聊天功能,使用 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';

useWorkerman\Worker;

useWorkerman\Connection\TcpConnection;

// 创建一个 WebSocket 服务器

$ws_worker=newWorker("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>

<htmllang="en">

<head>

<metacharset="UTF-8">

<title>WebSocket Chat</title>

</head>

<body>

<div>

<inputtype="text"id="user_id"placeholder="Your User ID">

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

</div>

<div>

<inputtype="text"id="to_user_id"placeholder="To User ID">

<inputtype="text"id="message"placeholder="Message">

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

</div>

<divid="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 与服务器通信,实现实时聊天功能。

http://www.jsqmd.com/news/589867/

相关文章:

  • 2026年比较好的母猪饲料/四川母猪饲料/常规鱼饲料销售厂家推荐 - 品牌宣传支持者
  • OpenClaw数据整理:Qwen3.5-9B支持的Excel自动化处理
  • 别再折腾API了!用Cloudflare AI Gateway免费中转Google Gemini,5分钟搞定LobeChat配置
  • PHP使用互斥锁确保代码的线程安全的操作示例
  • 不用编程!用555定时器制作超简单呼吸灯(完整电路图+元件清单)
  • 跨境电商运营避坑指南:如何用IPIDEA动态长效ISP代理给每个店铺配‘独立IP身份证’
  • 2026年口碑好的垃圾站气浮/焚烧厂气浮厂家精选 - 品牌宣传支持者
  • OpenClaw+百川2-13B-4bits量化模型:个人知识管理自动化方案
  • Golang与AWS SDK Go V2实战:构建高效云存储解决方案
  • OpenClaw多任务队列:Qwen3.5-9B并行处理图片批分析
  • PHP使用OCR技术实现识别图片中的文字
  • OpenClaw+千问3.5-27B代码助手:自动生成Python脚本并测试运行
  • CTF shellcode花样玩法盘点:从短小精悍到可见字符绕过,附实战exp代码
  • PHP解析配置文件的常用方法
  • 告别手动点鼠标!用Windows批处理脚本一键启动Adams并自动建模(附完整脚本)
  • MFI策略避坑指南:AKShare实战中遇到的5个典型问题与解决方案
  • OpenClaw+Phi-3-vision-128k-instruct实战:电商产品图自动生成描述文案
  • Lottie-Android实战:从入门到精通
  • OpenClaw隐私保护方案:Qwen3-14b_int4_awq本地化数据处理优势
  • 别再死磕文档了!用Vector Davinci Configurator手把手配置一个Autosar IO模块(附避坑指南)
  • PHP如何优化冗余代码
  • 2026年评价高的郑州塑料广告扇/郑州广告扇批发/郑州宣传广告扇实力厂家推荐 - 品牌宣传支持者
  • OpenClaw可视化监控:百川2-13B-4bits量化模型任务看板
  • C#调用Halcon必备DLL清单:手把手教你解决常见报错(附错误截图)
  • Chrome浏览器历史版本下载指南:稳定与兼容性的解决方案
  • OpenClaw模型热切换:Qwen3-14B与本地小模型协同工作方案
  • 2026年比较好的无纺布袋/郑州环保无纺布袋品牌厂家推荐 - 品牌宣传支持者
  • 移动端 AI Agent Harness Engineering 的机遇与限制
  • 2026年口碑好的对绞型计算机电缆/屏蔽计算机电缆公司推荐 - 品牌宣传支持者
  • OpenClaw+SecGPT-14B:5个提升个人安全效率的自动化脚本