我有一个棘轮服务器和聊天应用程序类运行良好.我的问题是如何添加周期循环?
我试图按照周期性地向Ratchet中的客户端发送消息的示例
但我一直无处可去.我的目标就像这个人,是服务器检查所有客户仍然活着.每次我尝试使用addPeriodicTimer时,我似乎无法访问chat.php中的$ clients公共属性,就像上面链接中的人一样,可以从server.php中的定时器发送消息.server.php中的周期性计时器中的foreach循环一直在抱怨它显然有一个"无效参数".
谁能看到我做错了什么?
我的server.php代码:
<?php
require($_SERVER['DOCUMENT_ROOT'].'/var/www/html/vendor/autoload.php');
require_once($_SERVER['DOCUMENT_ROOT']."/var/www/html/bin/chat.php");
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use Ram\Chat;
$server = IoServer::factory(new HttpServer(new WsServer(new Chat())), 8080);
// Server timer <------ having trouble here
$server->loop->addPeriodicTimer(5, function () use ($server) {
foreach($server->app->clients as $client)
{
//$client->send("[helloworld]");
}
});
$server->run();
?>
Run Code Online (Sandbox Code Playgroud)
和我的chat.php:
<?php
namespace Ram;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
error_reporting(E_ALL ^ E_NOTICE);
session_id($_GET['sessid']);
if(!session_id)
session_start();
$userid = $_SESSION["userid"];
$username = $_SESSION["username"];
$isadmin = $_SESSION["isadmin"];
$resources = array();
class Users
{
public $name;
public …Run Code Online (Sandbox Code Playgroud) 还有一个问题。我开始习惯 websocket 的工作方式。我什至设法实现了跨域通信。但现在我还没有达到另一个里程碑。
这是我当前实现的一个片段
public function onMessage(ConnectionInterface $conn, $msg)
{
$msgjson = json_decode($msg);
$tag = $msgjson->tag;
global $users;
if($tag == "[msgsend]")
{
foreach($this->clients as $client)
{
$client->send($msg);
}
}
else if($tag == "[bye]")
{
foreach($this->clients as $client)
{
$client->send($msg);
}
foreach($users as $key => $user)
{
if($user->name == $msgjson->uname)
{
unset($users[$key]);
}
}
$this->clients->detach($conn);
}
else if($tag == "[connected]")
{
//store client information
$temp = new Users();
$temp->name = $msgjson->uname;
$temp->connection = $conn;
$temp->timestamp = new \DateTime();
$users[] = $temp; …Run Code Online (Sandbox Code Playgroud)