🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
TCP 协议是一个可靠的传输协议,当数据传输中需要可靠的数据传输,并且数据到达顺序严格遵守发送顺序。如果数据传输失败需要重试,并且可以容忍偶尔发生延时,则推荐使用 TCP 协议。 在网络游戏开发中,TCP 协议扮演了重要的角色,很多即时对战的游戏都严重的依赖 TCP 协议。如魔兽世界,穿越火线等 > 当然,像魔兽世界这种大型网络游戏不可能只使用一种网络协议,我们只是针对当前章节举例 TCP 协议需要为每个客户端都建立一个 Socket 连接,传输的数据包没有大小限制。相比 UDP 协议而言,TCP 协议对服务器性能要求更大。 接下来我们演示一下,如何使用 ThinkPHP5 和 Swoole 来建立一个 TCP 服务器。 创建 ThinkPHP5 自定义命令行 1.创建命令行类 - 创建application/console/TcpServer.php文件 ~~~ <?php namespace app\Console; use think\console\Command; use think\console\Input; use think\console\Output; class TcpServer extends Command { protected $server; // 命令行配置函数 protected function configure() { // setName 设置命令行名称 // setDescription 设置命令行描述 $this->setName('tcp:start')->setDescription('Start TCP Server!'); } // 设置命令返回信息 protected function execute(Input $input, Output $output) { $this->server = new \swoole_server('0.0.0.0', 9501); $this->server->set([ 'worker_num' => 4, 'daemonize' => false, ]); $this->server->on('Start', [$this, 'onStart']); $this->server->on('Connect', [$this, 'onConnect']); $this->server->on('Receive', [$this, 'onReceive']); $this->server->on('Close', [$this, 'onClose']); $this->server->start(); // $output->writeln("TCP: Start.\n"); } // 主进程启动时回调函数 public function onStart(\swoole_server $serv) { echo "Start\n"; } // 建立连接时回调函数 public function onConnect(\swoole_server $server, $fd, $from_id) { echo "Connect\n"; } // 收到信息时回调函数 public function onReceive(\swoole_server $server, $fd, $from_id, $data) { echo "message: {$data} form Client: {$fd} \n"; // 将受到的客户端消息再返回给客户端 $server->send($fd, "Message form Server: ".$data); } // 关闭连时回调函数 public function onClose(\swoole_server $server, $fd, $from_id) { echo "Close\n"; } } ~~~ TCP 服务器常用的回调函数是onStart,onConnect,onReceive,onClose,分别是主进程的主线程启动时回调,客户端连接时回调,收到信息时回调,关闭连接时回调。接下来的章节介绍的onWorkerStart,onTimer,onTask,onFinish,等回调函数也可以应用在 TCP 服务器,本章节暂时不详述。 2.修改配置文件 - 文件所在 application/command.php ~~~ <?php return [ 'app\console\TcpServer', ]; ~~~ 接下来就可以通过命令行来启动 TCP 服务器 1 $ > `php think tcp:start` 看见如下返回说明 TCP 服务器启动成功 使用telnet工具来连接 TCP 服务器,下个章节我们会直接讲解如何使用 Swoole 的 TCP 客户端来连接 TCP 服务器 `telnet 127.0.0.1 9501` 输入Hello后会得到以下结果 >Hello Message form Server: Hello 同时服务器端也会显示出以下回执消息,来显示 TCP 服务器的客户端连接状态 >Start Connect message: Hello form Client: 1