PHP 使用 swoole 实现即时通讯 demo,以及聊天室实现方式

本文介绍如何使用Swoole扩展实现WebSocket实时双向通信,包括服务端代码配置与客户端JavaScript交互,展示了一个简单的聊天室功能实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务端代码

ini_set('display_errors', 1);
error_reporting(E_ALL);


$ws = new swoole_websocket_server("0.0.0.0", 8080);

//监听WebSocket连接打开事件   客户端 onopen 触发此事件
$ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件  客户端 send() 方法触发此事件 
$ws->on('message', function ($ws, $frame) {
    
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");//以 fd 为标识发给客户端 触发客户端 onmessage 事件
});

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

$ws->start();

客户端代码

<input id='msg'>
<h1 onclick='send()'>发送</h1>

<script>

var wsServer = 'ws://47.106.184.48:8080';
var websocket = new WebSocket(wsServer);

websocket.onopen = function (evt) {//链接成功事件
    console.log("Connected to WebSocket server.",'evt:'+evt);
};

websocket.onclose = function (evt) {//关闭链接事件
    console.log("Disconnected",'evt:'+evt);
};

websocket.onmessage = function (evt) {//接收消息事件 服务端 push事件 触发此事件
    console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {//发生错误后的事件
    console.log('Error occured: ' + evt.data);
};
console.log(websocket);
function send(){
let v = document.getElementById('msg').value;

websocket.send(v);//触发 服务端 message 事件

}

</script>

安装 swoole 扩展后

php youServerFile.php

聊天室功能,则是以 fd 群发消息就 ok 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值