<?php
/* WangYa phpFrame Application
* ******************************************
* home: www.2cms.com mail: wangya@2cms.com
* Copyright WangYa
* Trademark WangYa
* ******************************************
*2017 New year
*/
error_reporting( E_ALL);
$BAT = 1;
if(isset( $_SERVER[‘HTTP_HOST’] ))exit( ‘no cli’);
define (‘ONGHEAD’,”);
define(‘ONGPHP’ , dirname(__FILE__).’/../ong/’);
define(‘ONGTEMP’ , ‘temp’);
define(“ONGCON”, ”);
define(“ONGDB”, ”);
define(‘ONGNAME’ , ‘swjinhua’);
define(‘ONGQHTPL’, ”);
define(‘ONGQQTPL’, ”);
/*分解服务端标识*/
$AC = $_SERVER[‘argv’];
$_SERVERID = (float)isset($AC[‘1’])?$AC[‘1’]:0;
/*绑定服务地址*/
$_POST[‘serverip’] = ‘120.26.91.185’;
/*绑定服务端口*/
$_POST[‘serverpt’] = 8000 + $_SERVERID;
/*运行用户身份*/
$_POST[‘USER’] = ‘root’;
/*服务器名称*/
$_POST[‘GAMENM’] = ‘Tie Jinhua’;
$_POST[‘gameid’] = ‘gamejinhua’;
/*游戏逻辑处理间隔(毫秒)*/
$_POST[‘addtime’] = 88;
$_POST[‘cmw’] = 300;
$_POST[‘cmh’] = 300;
/*用户授权数据行数 比较小*/
$_POST[‘tableshqu’] = 999;
/* 缓存 用户数据行数*/
$_POST[‘tableuser’] = 9999;
/*缓存游戏房间行数*/
$_POST[‘tablegame’] = 999;
/*缓存CC防御ip行数*/
$_POST[‘tableccfy’] = 99999;
$_POST[‘mefen’] = array( 1 , 2, 4 , 10 ); //闷分接收下注
$_POST[‘yafen’] = array( 2 , 4 , 10, 20 ); //看牌的人
$_POST[‘zofen’] = array( 1 , 2 , 4 , 10 , 20 ); //总的筹码标注
/*开启线程*/
$_POST[‘JCNUM’] = 20;
require ONGPHP.’ong.php’;
$SQTOKEN = new swoole_table($_POST[‘tableshqu’]);
$SQTOKEN->column(‘u’, swoole_table::TYPE_INT, 8);
$SQTOKEN->create();
/*用户缓存*/
$USERCC = new swoole_table($_POST[‘tableuser’]);
$USERCC->column(‘u’, swoole_table::TYPE_INT, 8); /*用户uid*/
$USERCC->column(‘z’, swoole_table::TYPE_INT, 8); /*用户fid*/
$USERCC->column(‘f’, swoole_table::TYPE_INT, 8); /*游戏房间id*/
$USERCC->column(‘t’, swoole_table::TYPE_STRING, 96);/*用户token*/
$USERCC->create();
/*游戏服务数据库*/
$GAMECC = new swoole_table($_POST[‘tablegame’]);
$GAMECC->column(‘atime’, swoole_table::TYPE_INT, 8); /* 游戏创建时间 */
$GAMECC->column(‘isfguan’, swoole_table::TYPE_INT, 8); /* 房管uid*/
$GAMECC->column(‘off’, swoole_table::TYPE_INT, 8); /*游戏状态*/
$GAMECC->column(‘allqishu’, swoole_table::TYPE_INT, 8); /*游戏总期数*/
$GAMECC->column(‘qishu’, swoole_table::TYPE_INT, 8);/*游戏当前期数*/
$GAMECC->column(‘menfen’, swoole_table::TYPE_INT, 8); /*用户的闷分*/
$GAMECC->column(‘xianfen’, swoole_table::TYPE_INT, 8); /*用户看牌分*/
$GAMECC->column(‘alltongji’, swoole_table::TYPE_STRING, 800); /*所有数据统计 序列化 */
$GAMECC->column(‘tongji’, swoole_table::TYPE_STRING, 800); /* 当前局数统计*/
$GAMECC->column(‘fangmm’, swoole_table::TYPE_STRING, 96); /* 房间密码*/
$GAMECC->column(‘userinfo’, swoole_table::TYPE_STRING, 2000); /*所有用户信息*/
$GAMECC->column(‘shuohua’, swoole_table::TYPE_INT, 4); /*当前说话用户*/
$GAMECC->column(‘endd’, swoole_table::TYPE_INT, 4); /*用户最后动作*/
$GAMECC->column(‘cmw’, swoole_table::TYPE_STRING, 10000); /*筹码*/
$GAMECC->column(‘user’, swoole_table::TYPE_STRING, 300); /*参见游戏的用户*/
$GAMECC->column(‘dongzuo’, swoole_table::TYPE_STRING, 600); /*所有人动作*/
$GAMECC->column(‘pai’, swoole_table::TYPE_STRING, 600);/*用户牌数据*/
$GAMECC->column(‘ctime’,swoole_table::TYPE_INT, 8); /*游戏状态时间*/
$GAMECC->column(‘yctime’,swoole_table::TYPE_INT, 8); /*延迟时间*/
$GAMECC->create();
/* 防御CC k j 防御的数量*/
$FANGYUCC = new swoole_table($_POST[‘tableccfy’]);
$FANGYUCC-> column(‘j’, swoole_table::TYPE_INT, 8);
$FANGYUCC-> create();
$server = new swoole_websocket_server( $_POST[‘serverip’] , $_POST[‘serverpt’] );
经验积累 单服务器 结合swoole_table 实现 websocket 游戏服务端 框架
Table
swoole_table一个基于 共享内存 和锁实现的超高性能,并发数据结构。用于解决多进程/ 多线程 数据共享和同步加锁问题
swoole_table的优势
性能强悍,单线程每秒可读写100万次
无需加锁,swoole_table内置行锁自选锁,所有操作均是多线程/多进程安全。用户层完全不需要考虑数据同步问题。
支持多进程,swoole_table可以用于多进程之间共享数据
swoole_table使用行锁,而不是全局锁,仅当2个进程在同一CPU时间,并发读取同一条数据才会进行发生抢锁
table set 的灵活性
分布式设计 根据 房间id 分配到 不同的服务
踩入的坑 Redis 和 memcached 使用tcp 连接 通信 增加额外开销 一个get失效 所有数据将错乱 慎用 (应该是业务逻辑问题 重要 唯一性数据要保证100% 可有 才行)