cbl/php-pusher

一个用于创建简单WebSocket推送服务器的PHP框架。

1.2.3 2017-07-15 13:54 UTC

This package is auto-updated.

Last update: 2024-09-23 23:36:58 UTC


README

这是一个基于 Ratchet 的PHP WebSocket框架,用于创建强大的WebSocket服务器,可以向客户端推送数据,以保持客户端的更新。

需求

需要shell访问权限,推荐root权限。

入门指南

要安装框架,请运行: composer require cbl/php-pusher

代码示例

服务器

<?php
use PhpPusher\Server;

require_once __DIR__ . "/../../vendor/autoload.php";

class PusherServer extends Server
{
    public $key     = 'Password';
    public $port    = 8080;

    public function authLogin($client) {
        $cookies = $client->WebSocket->request->getCookies();
        // return false if the client has no session
        if(!isset($cookies['session']))
            return false;
        $session = $cookies['session'];
        if(!$session)
            return false;
        // Return the user id
        return 5;
        //return getUserIdBySession(urldecode($session));
    }

    public function authAdmin($client) {
        $admin_ids = [1,5,9];
        if(in_array($client->login, $admin_ids))
            return true;
        return false;
    }
}

// config
$config = [
    // Store multiple datasets in cache.
    'list' => [
        'chat_messages' => [
            'save_auth' => true
        ],
        'wallet' => [
            'cache' => false,
            'auth'  => ['login' => 'only']
        ]
    ],
    // Store only one dataset in cache
    'dict' => [
        'player' => [
            'auth' => ['login' => true]
        ]
    ],
    'specials' => [
        'online_counter' => true
    ]
];
// Create Server
$server = new PusherServer();
$server->setConfig($config);
$server->run();

客户端

<?php
use PhpPusher\Client;

require_once __DIR__ . "/../../vendor/autoload.php";

$key    = 'Password';
$client = new Client($key);

// Set a receiver id
$receiver = 5;
// Send a Chat Message
$client->send('chat_message', 'Hi!', $receiver);
// Send wallet amount only to the receiver
$client->send('wallet', 100, $receiver);
// Start a timer
$client->startTimer('game_timer', 30, true);
// Publish game after timer
$client->send('game', [
    'data' => 'Some Data.'
]);