专栏首页codingswoole创建tcp服务器tcp server使用telnet连接自定义 tcp client

swoole创建tcp服务器tcp server使用telnet连接自定义 tcp client

tcp服务官方文档

swoole tcp

tcp server

<?php

/**
 * Class Tcp
 * Tcp服务
 */
class Tcp {
    CONST HOST = "0.0.0.0";
    CONST PORT = 9501;

    public $tcp = null;
    public function __construct()
    {
        $this->tcp = new swoole_server(self::HOST, self::PORT);
        $this->tcp->set(
            [
                'worker_num' => 6,
                'max_request' => 10000,
            ]
        );
        $this->tcp->on('connect', [$this, 'onConnect']);
        $this->tcp->on('receive', [$this, 'onReceive']);
        $this->tcp->on('close', [$this, 'onClose']);

        $this->tcp->start();
    }

    /**
     * 监听连接事件
     * @param $tcp
     * @param $fd
     * @param $reactor_id
     */
    public function onConnect($tcp, $fd, $reactorId)
    {
        echo "客户端id:{$fd}连接成功,来自于线程{$reactorId}\n";
    }

    /**
     * 监听接收事件
     * @param $tcp
     * @param $fd
     * @param $reactor_id
     * @param $data
     */
    public function onReceive($tcp, $fd, $reactorId, $data)
    {
        echo "接收到了客户端id: {$fd} 发送的数据:{$data}";
        $sendData = "服务端将客户端发送的数据原样返回:{$data}";
        $tcp->send($fd, $sendData);
    }

    /**
     * 监听关闭事件
     * @param $tcp
     * @param $fd
     */
    public function onClose($tcp, $fd)
    {
        echo "客户端id: {$fd} 关闭了连接\n";
    }
}

$tcp = new Tcp();

开启服务:

☁  server [master] ⚡ php tcp.php
[2018-04-30 14:41:23 @69315.0]  TRACE   Create swoole_server host=0.0.0.0, port=9501, mode=3, type=1

使用telnet连接

☁  client [master] ⚡ telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello swoole
服务端将客户端发送的数据原样返回:hello swoole

自定义 tcp client

tcp_client.php

<?php

/**
 * Class TcpClient
 * Tcp客户端
 */
class TcpClient
{
    const HOST = "127.0.0.1";
    const PORT = 9501;

    public $client = null;

    public function __construct()
    {
        $this->client = new swoole_client(SWOOLE_SOCK_TCP);
        $this->connect();
    }

    public function connect()
    {
        if(!$this->client->connect(self::HOST, self::PORT)) {
            echo '连接失败';
            exit;
        }
    }

    public function send()
    {
        fwrite(STDOUT, '请输入消息:');
        $msg = trim(fgets(STDIN));
        $this->client->send($msg);
    }

    public function receive()
    {
        $result = $this->client->recv();
        echo $result . "\n";
    }
}

$client = new TcpClient();
$client->send();
$client->receive();

执行结果:

☁  client [master] ⚡ php tcp_client.php
请输入消息:swoole  tcp 客户端测试
服务端将客户端发送的数据原样返回:swoole tcp 客户端测试

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • vue 组件基本使用

    组件是可复用的 Vue 实例,且带有一个名字。把这个组件作为自定义元素来使用。组件的好处是写一次可以进行任意次数的复用

    章鱼喵
  • centos7搭建sftpsftp先决条件设置sftp用户配置 sshd_config 测试连接

    章鱼喵
  • Linux笔记6.权限及用户

    章鱼喵
  • 原型继承面试题精讲

    HTML5学堂:最近看到一道考察面向对象、原型继承的面试题,关于一只小狗狗和一只“精力旺盛”的小狗狗的故事~今天就来讲讲这个吧。 题目要求 有一条可爱的小狗(名...

    HTML5学堂
  • Linux下的make命令用法

    Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问...

    老白
  • GitHub上能让你重拾学习热情的AI项目:权游预测/AI作画/与AlphaZero对弈

    4月15号《权力的游戏》第八季开播啦!从第一季开始,就有同学告诉小编“永远猜不出来主角是谁,你以为他是主角?不好意思,下集就领便当了” 。

    Datawhale
  • 人工智能大数据背后的神秘公式:贝叶斯公式

    转自:工业智能化 大数据、人工智能、海难搜救、生物医学、邮件过滤,这些看起来彼此不相关的领域之间有什么联系?答案是,它们都会用到同一个数学公式——贝叶斯公式。它...

    企鹅号小编
  • 基于SpringBoot2.0开发的后台管理系统

    TIMO后台管理系统,基于SpringBoot2.0 + Spring Data Jpa + Thymeleaf + Shiro 开发的后台管理系统,采用分模块...

    程序源代码
  • 搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

    每个HTML元素都具有clientHeight offsetHeight scrollHeight offsetTop scrollTop 这5个和元素高度、滚...

    IMWeb前端团队
  • SAP CRM系统里Opportunity预期销售金额和货币相关的自动转换

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券