Gateway游戏项目,不同房间游戏开始之前定时30秒,30秒后开始处理游戏,上次的问题虽然搞定了异步进行,现在问题是前端显示会跳过秒数,比如30 29 直接27了这样,这个秒数我是从数据库读出来每一秒都返回给前端,会不会是这个频繁操作数据库引起的?如果客户端开多了房间,我估计很快就卡住了,看了社区的问题想单独开启个进程来处理定时器,麻烦指导下该怎么做,新手, 谢谢了。
下面是别人问题中的 http://wenda.workerman.net/?/question/1020
Events.php
public static function onConnect($client_id)
{
$task_connection = new AsyncTcpConnection('Text://127.0.0.1:13000');
$task_connection->send('send to task workerman');
$task_data = array(
'function' => 'send_mail',
'args' => array('from'=>'xxx', 'to'=>'xxx', 'contents'=>'xxx'),
);
$task_connection->send(json_encode($task_data));
$task_connection->onMessage = function($task_connection, $task_result){
// 结果
var_dump($task_result);
// 获得结果后记得关闭链接
$task_connection->close();
};
// 执行异步链接
$task_connection->connect();
}
然后这段代码该放在哪里呢
$task_worker = new Worker('Text://127.0.0.1:13000');
$task_worker->count = 10;
$task_worker->name = 'TaskWorker';
$task_worker->onMessage = function($connection, $task_data){
$task_data = json_decode($task_data, true);
$task_result = 'fuck you';
$connection->send(json_encode($task_result));
};
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
一个简单的倒计时为什么读数据库呢?直接一个每秒一次的定时器记录下变量累减就好了。
定时器放在单独进程或者其它进程都可以,看自己会哪种。
不同房间游戏开始的时候倒计时累减的变量不会被覆盖吗
操作不同的变量就好了。
例如搞个全局数组
谢谢,我试试。。。。use 里面的$connection参数是什么来的。发送到哪里去的
你好,能说下workman怎么new worker 单独处理定时器吗