コード例 #1
0
ファイル: HttpServer.php プロジェクト: xingcuntian/swooleIM
 /**
 * 发送响应
 * @param $client_id
 * @param \Swoole\Response $response
 * @return unknown_type
 */
 function response($client_id, $response)
 {
     if (!isset($response->head['Date'])) {
         $response->head['Date'] = gmdate("D, d M Y H:i:s T");
     }
     if (!isset($response->head['Server'])) {
         $response->head['Server'] = self::SOFTWARE;
     }
     if (!isset($response->head['KeepAlive'])) {
         $response->head['KeepAlive'] = 'off';
     }
     if (!isset($response->head['Connection'])) {
         $response->head['Connection'] = 'close';
     }
     if (!isset($response->head['Content-Length'])) {
         $response->head['Content-Length'] = strlen($response->body);
     }
     $out = $response->head();
     $out .= $response->body;
     $this->server->send($client_id, $out);
 }
コード例 #2
0
ファイル: Server.php プロジェクト: myqee/server
 /**
  * 收到信息
  *
  * @param \Swoole\Server $server
  * @param $fd
  * @param $fromId
  * @param $data
  */
 public function onReceive($server, $fd, $fromId, $data)
 {
     $data = trim($data);
     if ($data === '') {
         return;
     }
     /**
      * @var \Swoole\Server $server
      */
     $tmp = @msgpack_unpack($data);
     if (is_object($tmp) && $tmp instanceof \stdClass) {
         $rpc = static::$defaultRPC;
         if ($tmp->rpc) {
             if (preg_match('#^[\\\\0-9a-z]+$#i', $tmp->rpc)) {
                 $rpc = $tmp->rpc;
             }
         }
         /**
          * @var RPC $rpc
          */
         $key = $rpc::_getRpcKey();
         if ($key) {
             # 解密数据
             $tmp = self::decryption($tmp, $key, $rpc);
             if (false === $tmp) {
                 # 数据错误
                 $server->send($fd, '{"type":"close","code":0,"msg":"decryption fail."}' . static::$EOF);
                 $server->close($fd, $fromId);
                 \MyQEE\Server\Server::$instance->debug("register server decryption error, data: " . substr($data, 0, 256) . (strlen($data) > 256 ? '...' : ''));
                 return;
             }
         }
         $data = $tmp;
         unset($tmp);
         if ('bind' === $data->type) {
             if ($this->server->setting['dispatch_mode'] === 5 && is_int($data->id)) {
                 # 支持 worker 绑定
                 $this->server->bind($fd, $data->id);
             }
             return;
         }
         $data->rpc = $rpc;
         if (in_array($this->server->setting['dispatch_mode'], [1, 3]) && ($workerNum = $this->server->setting['worker_num']) > 1) {
             # 服务器是轮循或抢占模式, 每次请求的可能不是同一个 worker
             $workerId = $fd % $workerNum;
             if ($workerId !== $this->server->worker_id) {
                 # 发送给对应的进程去处理
                 $obj = new \stdClass();
                 $obj->type = 'call';
                 $obj->fd = $fd;
                 $obj->fromId = $fromId;
                 $obj->data = $data;
                 $this->sendMessage($data, $workerId);
                 return;
             }
         }
         # 执行RPC调用
         $this->call($fd, $fromId, $data);
     } else {
         \MyQEE\Server\Server::$instance->warn("rpc get error msgpack data: " . substr($data, 0, 256) . (strlen($data) > 256 ? '...' : ''));
         $this->server->close($fd, $fromId);
         return;
     }
 }
コード例 #3
0
ファイル: server.php プロジェクト: noikiy/swoole-src
<?php

use Swoole\Server;
$serv = new Server("127.0.0.1", 9501);
$serv->on('receive', function (Server $serv, $fd, $from_id, $data) {
    echo "[#" . $serv->worker_id . "]\tClient[{$fd}]: {$data}\n";
    if ($serv->send($fd, "hello\n") == false) {
        echo "error\n";
    }
});
$serv->start();