Home >Backend Development >PHP Tutorial >PHP based real time chat system with chat room and online gaming capabilities
Chat room and online game functions of real-time chat system based on PHP
With the continuous development and popularization of Internet technology, real-time communication has become an indispensable part of people's lives. missing part. As an important part of it, real-time chat system has been widely used in various online social platforms and websites. This article will introduce a real-time chat system based on PHP and how to add chat rooms and online game functions.
The key to a real-time chat system is to be able to implement instant messaging functions so that users can send and receive messages in the system in real time. In PHP, WebSocket technology can be used to achieve real-time communication. WebSocket is a protocol for full-duplex communication over a single TCP connection, which is able to provide persistent connections without placing too much burden on the server.
First, we need to create a WebSocket server to handle the sending and receiving of real-time messages. The following is a simple PHP code example:
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); // 监听 WebSocket 连接打开事件 $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "客户端 {$request->fd} 进入聊天室 "; }); // 监听 WebSocket 消息事件 $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "收到客户端消息:{$frame->data} "; // 将消息发送给所有连接的客户端 foreach ($server->connections as $fd) { $server->push($fd, $frame->data); } }); // 监听 WebSocket 连接关闭事件 $server->on('close', function ($ser, $fd) { echo "客户端 {$fd} 离开聊天室 "; }); // 启动 WebSocket 服务器 $server->start(); ?>
In the above code, we use the Swoole extension to create a WebSocket server. When a new client connects, the open
event will be triggered. When a client sends a message, the message
event will be triggered. When a client closes the connection, it will triggerclose
Event. We can perform corresponding processing in the callback functions of these events.
Next, we can add some basic functions to the chat room, such as displaying a list of online users and private chat functions. Modify the above code:
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); // 在线用户列表 $onlineUsers = []; // 监听 WebSocket 连接打开事件 $server->on('open', function (SwooleWebSocketServer $server, $request) use (&$onlineUsers) { echo "客户端 {$request->fd} 进入聊天室 "; // 将用户添加到在线用户列表 $onlineUsers[$request->fd] = $request->fd; }); // 监听 WebSocket 消息事件 $server->on('message', function (SwooleWebSocketServer $server, $frame) use (&$onlineUsers) { echo "收到客户端消息:{$frame->data} "; $data = json_decode($frame->data, true); // 判断消息类型 switch ($data['type']) { case 'message': // 将消息发送给所有连接的客户端 foreach ($onlineUsers as $fd) { $server->push($fd, json_encode([ 'type' => 'message', 'username' => $data['username'], 'content' => $data['content'], ])); } break; case 'private_message': // 私聊功能 $receiver = $data['receiver']; $content = $data['content']; // 判断接收者是否在线 if (isset($onlineUsers[$receiver])) { $server->push($receiver, json_encode([ 'type' => 'private_message', 'sender' => $frame->fd, 'content' => $content, ])); } else { // 如果接收者不在线,则提示发送失败 $server->push($frame->fd, json_encode([ 'type' => 'error', 'content' => '发送失败,接收者不在线!', ])); } break; } }); // 监听 WebSocket 连接关闭事件 $server->on('close', function ($ser, $fd) use (&$onlineUsers) { echo "客户端 {$fd} 离开聊天室 "; // 将用户从在线用户列表中移除 unset($onlineUsers[$fd]); }); // 启动 WebSocket 服务器 $server->start(); ?>
In the above code, we added an $onlineUsers
array to save the fd
of online users. When a new user connects, its fd
is added to the array; when a user disconnects, it is removed from the array. And in the message event, we added logic to determine the message type. If it is a private chat message, the private chat content will be sent to the recipient, otherwise the chat content will be broadcast to all connected clients.
In addition to the chat room function, we can also add online gaming functions to the real-time chat system. For example, we can implement a guessing number game. Modify the above code:
// 监听 WebSocket 消息事件 $server->on('message', function (SwooleWebSocketServer $server, $frame) use (&$onlineUsers) { echo "收到客户端消息:{$frame->data} "; $data = json_decode($frame->data, true); // 判断消息类型 switch ($data['type']) { ... case 'guess_number': // 猜数字游戏 $numbers = range(1, 10); $answer = array_rand($numbers); if ($data['number'] == $answer) { $server->push($frame->fd, json_encode([ 'type' => 'guess_number', 'result' => '猜对了!', ])); } else { $server->push($frame->fd, json_encode([ 'type' => 'guess_number', 'result' => '猜错了!答案是' . $answer, ])); } break; } });
In the above code, we added a guess_number
message type to handle the logic of the guessing game. When a client sends a message to guess a number, the server generates a random answer, compares it to the client's guess, and returns the result to the client.
Through the above sample code, we can implement a simple real-time chat system based on PHP and add chat rooms and online game functions. Of course, this is just a simple example, and more details and security need to be considered in actual applications. Hope this article helps you!
The above is the detailed content of PHP based real time chat system with chat room and online gaming capabilities. For more information, please follow other related articles on the PHP Chinese website!