PHP 聊天 五子棋 斗地主
基于swoole的聊天系统 包括聊天,五子棋,斗地主功能
聊天系统包括的功能:
- 实时发送消息,消息的内容类型:纯文本消息,表情消息,图片消息(独发方式),发送附件(独发方式),发送粘帖板图片
- 发送消息类型:私发消息,群发消息,撤回消息
- 群组功能:创建群组,拉好友进群组,群组创建者删除群组成员
- 好友功能:查找好友,实时发送好友请求,实时处理好友请求,实时返回处理结果
- 个人信息:个人信息修改,头像上传,密码修改
- 连接断开系统不会自动连接,需要手动连接(刷新页面即可重新连接)
五子棋的功能点:
- 棋局列表,棋局人员实时状态
- 棋局页实时状态
- 下棋部分,目前只能下棋,直至分出胜负,不支持悔棋,不支持求和
- 每次下棋后会创建定时器,超时未下系统会自动判断对方赢得此场比赛
- 连接断开系统不会自动连接,需要手动连接(刷新页面即可重新连接)
斗地主功能点:
- 牌局列表,棋局人员实时状态
- 牌局页实时状态
- 坐入桌子指定位置
- 实时同步发牌,抢地主,加倍,打牌,打牌提醒,以及最终打牌结果
- 倒计时显示(倒计时暂时只是显示,没有处理后台逻辑)
- 打牌结果显示,金币结算(金币结算结果还未在前台展示,有没金币暂时都可以打牌)
源代码地址:
https://github.com/zlilizh/php_chat
开发环境(基于docker布署):
php7.2 (docker pull zlilizh/phpfpm7.2 )
swoole 4.7(swoole环境的PHP单独布署) (docker pull zlilizh/swlphp7.2)
nginx latest (docker pull nginx )
mysql 5.7 (docker pull mysql:5.7.34)
redis latest (docker pull redis)
各功能的系统界面
下面是以在win10系统的docker中布署此项目的例子
1,拉取镜像
docker pull zlilizh/swlphp7.2
docker pull zlilizh/phpfpm7.2
docker pull nginx
docker pull mysql:5.7.34
docker pull redis
2,创建项目目录与文件+拉取代码:
D:\dkml\phpfpm72_conf #PHP7.2配置目录
D:\dkml\mysql5734_data #mysql5.7数据目录
D:\dkml\xm\ #代码存放目录 把代码拉取到此目录,项目地址 https://github.com/zlilizh/php_chat.git 拉完后的目录就是D:\dkml\xm\php_chat (chat_cli与chat_ser都放在此目录下)
D:\dkml\nginx #nginx相关配置目录 在nginx目录下面创建 nginx.conf 默认配置如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
3,启动容器&安装依赖:
- 启动nginx:
docker run -d --name mynginx -p 80:80 -v d/dkml/nginx/nginx.conf:/etc/nginx/nginx.conf -v d/dkml/nginx/logs:/var/log/nginx -v d/dkml/xm:/usr/share/nginx/html -v d/dkml/nginx/conf/:/etc/nginx/conf.d --privileged=true nginx
- 启动mysql:
docker run -p 3306:3306 --name mysql5734 -v d/dkml/mysql5734_data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.34
- 启动swooles:
docker run -it --name myswoole -p 9501:9501 -v d/dkml/xm:/usr/share/swl zlilizh/swlphp7.2 sh
- 启动php7.2:
docker run -d --name myphp72fpm --restart always --privileged=true -p 9000:9000 -v d/dkml/xm:/usr/share/nginx/html -v d/dkml/phpfpm72_conf:/usr/local/etc/php/conf.d zlilizh/phpfpm7.2
- 启动redis
docker run -d --name myredis -p 6379:6379 redis:latest
-
php7.2的容器都需要额外配置下pdo_mysql gd redis(swoole镜像已经安装了)这三个扩展,在在D:\dkml\phpfpm72_conf\ 目录下面创建 docker-php-ext.ini文件,添加如下配置:
extension=pdo_mysql.so extension=gd.so extension=redis.so date.timezone=Asia/Shanghai
4,确定域名,配置nginx虚拟主机
- 确定域名
当前配置以 www.csct.com 为例,修改本地host 配置域名
127.0.0.1 www.csct.com
- 配置nginx虚拟主机
在D:\dkml\nginx\conf\ 目录下面创建 default.conf文件,添加如下配置
server { listen 80; server_name www.csct.com; root /usr/share/nginx/html/php_chat/chat_cli; location / { index index.php index.html index.htm; autoindex off; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ ^/assets/.*\.php$ { deny all; } location ~ \.php(.*)$ { root html; fastcgi_pass 主机IP:9000; #把主机IP换成自己的IP fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/php_chat/chat_cli$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED /usr/share/nginx/html/php_chat/chat_cli$fastcgi_path_info; include fastcgi_params; } location ~* /\.ht { deny all; } }
5,配置代码
- 修改chat_cli的配置文件:
重命名 chat_cli/config/ 目录下 db_config_bast.php 为 db_config.php 并修改对应的配置
WEB_URL 本地访问URL,与nginx里面的配置要一致
$db_config #DB相关配置
$web_config['ws_addr'] #是websockt地址 主机IP:9501
$r_cof #Redis的相关配置 - 修改chat_ser的配置文件:
重命名 chat_ser/config/ 目录下 main_bast.php 为 main.php 修改 $db_config g与 $r_cof即可
6,导入数据库
数据库名:chat,导入 D:\dkml\xm\php_chat\chat.sql 文件 到此项目都已经配置完成
启动项目
进入swoole容器并启动监听
cd /usr/share/swl/php_chat/chat_ser
php index.php
浏览器里面输入 www.csct.com
默认账号 admin, cs,mingr,kakax,yzbb,yzby,zhuj等,其它账号可以表 xt_member 中查看,密码统一是123456