コード例 #1
0
 public function onTask($server, $task_id, $from, $data)
 {
     Cli::out("Task #{$task_id} started.");
     $json = json_decode($data, true);
     foreach ($this->subscribers as $fd => $row) {
         if (empty($json['channel']) or empty($row['channel']) or false !== strpos(',' . $row['channel'] . ',', ',' . $json['channel'] . ',')) {
             $this->server->push($fd, $data);
         }
     }
     return true;
 }
コード例 #2
0
ファイル: websocket.php プロジェクト: 91xcode/laravel-admin
 /**
  * 接受消息时
  *
  * @param swoole_websocket_server $server
  * @param $frame
  * @author yangyifan <*****@*****.**>
  */
 public function onMessage(swoole_websocket_server $server, $frame)
 {
     //组合数据
     $data = json_decode($frame->data, true);
     $data['time'] = date('Y-m-d H:i:s');
     $server->push($data['id'], json_encode($data));
 }
コード例 #3
0
<?php

$ws = new swoole_websocket_server("0.0.0.0", 9600);
$ws->on('open', function ($ws, $request) {
    $ws->push($request->fd, "hello, welcome\n");
});
$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
});
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});
$ws->start();
コード例 #4
0
ファイル: server.php プロジェクト: stonegithubs/swoole-vmstat
 */
function callback_vmstat(swoole_process $worker)
{
    global $table;
    $vmstat = $table->get('vmstat');
    $cmd = $vmstat['cmd'];
    $interval = $vmstat['interval'];
    $count = $vmstat['count'];
    $worker->exec($cmd, array($interval, $count));
}
/**
 * 当WebSocket客户端与服务器建立连接并完成握手后会回调此函数。
 */
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
    $server->push($request->fd, "procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----\n");
    $server->push($request->fd, "r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa\n");
});
/**
 * 当服务器收到来自客户端的数据帧时会回调此函数。
 */
$server->on('message', function (swoole_websocket_server $server, $frame) {
    // 	echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    // 	$server->push($frame->fd, "this is server");
});
/**
 * 当客户端关闭的时候调用
 */
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});
コード例 #5
0
 $request = json_decode($frame->data, true);
 print_r($request);
 $cmd = $request['cmd'];
 $data = $request['data'];
 switch ($cmd) {
     case 'login':
         $uid = 'uid_' . $frame->fd;
         $redis->lpush('uid_list', $frame->fd);
         $username = $data['username'];
         $redis->set($uid, $username);
         $user_list = get_online_users($redis);
         $response = ['cmd' => 'login', 'data' => ['user' => $username, 'user_list' => $user_list]];
         $response_data = json_encode($response);
         //通知新用户登录
         foreach ($serv->connections as $fd) {
             $serv->push($fd, $response_data);
         }
         break;
     case 'send_msg':
         $username = $data['from'];
         $send_to = $data['send_to'];
         $content = $data['content'];
         $color = $data['color'] ?? '';
         $font_size = $data['font_size'] ?? '';
         $response = ['data' => ['from' => $username, 'content' => $content, 'color' => $color, 'font_size' => $font_size]];
         echo 888;
         //to all
         if ($send_to == 0) {
             $response['cmd'] = 'send_to_all';
             $response_data = json_encode($response);
             foreach ($serv->connections as $fd) {
コード例 #6
0
ファイル: server.php プロジェクト: harryheng/test
<?php

$server = new swoole_websocket_server("0.0.0.0", 8080);
$server->on('message', function (swoole_websocket_server $server, $frame) {
    foreach ($server->connection_list() as $fd) {
        $server->push($fd, $frame->data, true);
    }
});
$server->start();
コード例 #7
0
                        $str = str_replace('load average:', '', $str);
                        $str = $nowtime . ',' . $str;
                        $serv->push($fd, $str);
                    }
                }
            }
        });
    }
});
/**
 * 当WebSocket客户端与服务器建立连接并完成握手后会回调此函数。
 */
$server->on('open', function (swoole_websocket_server $server, $request) {
    $fd = $request->fd;
    echo "server: handshake success with fd{$fd}\n";
    $server->push($fd, "nowtime -----------Linetime---------- ---users-- -----load average----\n");
    $server->push($fd, "nowtime,days,time,users,one,five,fifteen\n");
});
/**
 * 当服务器收到来自客户端的数据帧时会回调此函数。
 */
$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});
/**
 * 当客户端关闭的时候调用
 */
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});
コード例 #8
0
    $hash = md5($cb_pass . $cb_name);
    //if fd is 1, the server had been restarted
    if ($request->fd == 1) {
        hash_clear($redis);
    }
    var_dump($hash, $request->fd);
    //save $fd => $hash
    if ($redis->hGet('fd.to.hash', $request->fd) != $hash) {
        $redis->hSet('fd.to.hash', $request->fd, $hash);
    }
    //save $hash => $fd, this list be used to publish msg on the channel.
    $redis->lPush('publish_' . $hash, $request->fd);
    $all = $redis->lRange($hash, 0, -1);
    $all = array_reverse($all);
    $result = array('type' => 'all', 'data' => $all);
    $ws->push($request->fd, json_encode($result));
});
$ws->on('message', function ($ws, $frame) {
    global $redis;
    $hash = $redis->hGet('fd.to.hash', $frame->fd);
    $r = json_decode($frame->data, true);
    if (empty($r)) {
        return;
    }
    $msg = $r['msg'];
    if ($msg === '') {
        return;
    }
    switch ($r['type']) {
        case 'message':
            save_cb($redis, $hash, $msg);
コード例 #9
0
<?php

$map = [];
$server = new swoole_websocket_server("0.0.0.0", 9501);
$server->on('open', function (swoole_websocket_server $server, $request) use(&$map) {
    var_dump($request);
    echo "server: handshake success with fd{$request->fd}\n";
    $map[$request->fd] = $request->fd;
});
$server->on('message', function (swoole_websocket_server $server, $frame) use(&$map) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    // var_dump($map);
    foreach ($map as $id => $value) {
        $server->push($id, "this is server, " . $frame->data);
    }
});
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});
$server->start();
コード例 #10
0
 public function actionSwooleserver()
 {
     $host = '0.0.0.0';
     $port = 9501;
     $server = new \swoole_websocket_server($host, $port);
     $server->on('open', function (\swoole_websocket_server $server, $request) {
         echo "server: handshake success with fd{$request->fd} \n";
     });
     $server->on('message', function (\swoole_websocket_server $server, $frame) {
         echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
         $key = $frame->data;
         $reply = 'this is swoole server: your key=' . $key;
         //Yii::log('serializer='.Yii::$app->cache->serializer);// yii 对memcache的value序列化存储了
         $listOri = Yii::$app->cache->get($key);
         //$this->keyAdd;
         $list = @json_decode($listOri, true);
         //print_r($list);
         $data = ['code' => 0, 'msg' => 'ok', 'data' => ['reply' => $reply, 'total' => count($list), 'list' => $list]];
         $server->push($frame->fd, json_encode($data));
     });
     $server->on('close', function ($ser, $fd) {
         echo "client {$fd} closed\n";
     });
     $server->start();
     echo "swolle server start by {$host}:{$port}\n";
 }
コード例 #11
0
ファイル: server.php プロジェクト: matyhtf/websocket_tail
$server->on('WorkerStart', function (swoole_websocket_server $server, $worker_id) {
    G::$inotify = inotify_init();
    swoole_event_add(G::$inotify, function ($ifd) use($server) {
        $events = inotify_read(G::$inotify);
        if (!$events) {
            return;
        }
        foreach ($events as $event) {
            $filename = G::$watchList[$event['wd']];
            $line = fgets(G::$files[$filename]['fp']);
            if (!$line) {
                echo "fgets failed\n";
            }
            //遍历监听此文件的所有用户,进行广播
            foreach (G::$files[$filename]['users'] as $fd) {
                $server->push($fd, $line);
            }
        }
    });
});
$server->on('Message', function (swoole_websocket_server $server, $frame) {
    echo "message: " . $frame->data;
    $result = json_decode($frame->data, true);
    $filename = $result['filename'];
    //以文件名作为数组的值,Key是fd
    $filename = __DIR__ . '/' . $filename;
    if (!is_file($filename)) {
        $server->push($frame->fd, "file[{$filename}] is not exist.\n");
        return;
    }
    //还没有创建inotify句柄
コード例 #12
0
ファイル: ws_server.php プロジェクト: chenjiesuper/chatroom
//创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", 9502);
//监听WebSocket连接打开事件
$ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $start_fd = 0;
    while (true) {
        $conn_list = $ws->connection_list($start_fd, 10);
        if ($conn_list === false or count($conn_list) === 0) {
            echo "finish\n";
            break;
        }
        $start_fd = end($conn_list);
        var_dump($conn_list);
        foreach ($conn_list as $fd) {
            $ws->push($fd, "消息: " . $request->fd . "来到了房间");
        }
    }
});
//监听WebSocket消息事件
$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $start_fd = 0;
    while (true) {
        $conn_list = $ws->connection_list($start_fd, 10);
        if ($conn_list === false or count($conn_list) === 0) {
            echo "finish\n";
            break;
        }
        $start_fd = end($conn_list);
        var_dump($conn_list);
コード例 #13
0
ファイル: my-server.php プロジェクト: silentred/learning-path
<?php

$server = new swoole_websocket_server("", 9501);
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});
$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $conn_list = $server->connection_list();
    //var_dump($conn_list); 广播
    foreach ($conn_list as $fd) {
        $server->push($fd, "from: client{$frame->fd}, content: " . $frame->data);
    }
    //$server->push($frame->fd, "from: client{$fd}, content: ".$frame->data);
});
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});
$server->start();
コード例 #14
0
ファイル: bubble.php プロジェクト: findbrick/bubble
define('CONTENT_MAXLEN', 500);
//创建websocket服务器对象,监听127.0.0.1:9009端口
$ws = new swoole_websocket_server("127.0.0.1", 9009);
//机器人类
$robot = new Robot();
//在线用户详情记录
$table = new swoole_table(1024 * 10);
$table->column('name', swoole_table::TYPE_STRING, 16);
$table->column('fd', swoole_table::TYPE_INT);
$table->column('dateline', swoole_table::TYPE_INT);
$table->column('avatar', swoole_table::TYPE_INT);
$table->column('ip', swoole_table::TYPE_STRING, 16);
$table->create();
$ws->table_user = $table;
$ws->on('open', function ($ws, $request) {
    $ws->push($request->fd, jsonResult('open', SUCCESS_CODE, "连接成功!\n"));
});
$frames_data = array();
$ws->on('message', function ($ws, $frame) {
    global $robot, $frames_data;
    $frames_data[$frame->fd] = isset($frames_data[$frame->fd]) ? $frames_data[$frame->fd] : '';
    $frames_data[$frame->fd] .= $frame->data;
    if ($frame->finish) {
        $json = $frames_data[$frame->fd];
        $msg = json_decode($json, true);
        unset($frames_data[$frame->fd]);
        if (JSON_ERROR_NONE == json_last_error()) {
            $act = $msg['action'];
            switch ($act) {
                case 'login':
                    //用户登录
コード例 #15
0
ファイル: server.php プロジェクト: jonny77/swoole-camera
<?php

$serv = new swoole_websocket_server('0.0.0.0', 9501);
$serv->on('Request', function ($req, $resp) {
    if ($req->server['request_uri'] == '/camera') {
        $html = file_get_contents(__DIR__ . '/camera.html');
    } else {
        $html = file_get_contents(__DIR__ . '/index.html');
    }
    $resp->end($html);
});
$serv->on('Message', function ($serv, $frame) {
    $connections = $serv->connection_list();
    foreach ($connections as $fd) {
        $info = $serv->connection_info($fd);
        if ($fd != $frame->fd and $info['websocket_status'] > 1) {
            $serv->push($fd, $frame->data);
        }
    }
});
$serv->start();
コード例 #16
0
 * websocket server start
 * 成功后回调
 */
$server->on('start', function ($serv) use($_maxMasterPidLength, $_maxManagerPidLength, $_maxWorkerIdLength, $_maxWorkerPidLength) {
    echo "\n----------------------- SWOOLE -----------------------------\n";
    echo 'swoole version:' . swoole_version() . "          PHP version:" . PHP_VERSION . "\n";
    echo "------------------------ WORKERS ---------------------------\n";
    echo "MasterPid", str_pad('', $_maxMasterPidLength + 2 - strlen('MasterPid')), "ManagerPid", str_pad('', $_maxManagerPidLength + 2 - strlen('ManagerPid')), "WorkerId", str_pad('', $_maxWorkerIdLength + 2 - strlen('WorkerId')), "WorkerPid", str_pad('', $_maxWorkerPidLength + 2 - strlen('WorkerPid')), "\n";
});
/**
 * 当WebSocket客户端与服务器建立连接并完成握手后会回调此函数。
 */
$server->on('open', function (swoole_websocket_server $server, $request) {
    $fd = $request->fd;
    echo "server: handshake success with fd{$fd}\n";
    $server->push($fd, "Mem -----------Swap---------\n");
    $server->push($fd, "total used free shared buff/cache available Total Used Free\n");
});
/**
 * 当服务器收到来自客户端的数据帧时会回调此函数。
 */
$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});
/**
 * 当客户端关闭的时候调用
 */
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});