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 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Fedora 22上安装LAMP(Linux,Apache,MySQL,PHP)

LAMP堆栈是一组用于启动和运行Web服务器的开源软件。首字母缩略词代表Linux,Apache,MySQL和PHP。由于服务器已经在运行Fedora,因此需要...

1172
来自专栏王肖的UT

Assimp Android 编译

2584
来自专栏Android相关

dex-method-counts的配置与使用

由于aapt打包的时候,方法数不能超过65535,所以需要使用该工具来检测apk方法数

762
来自专栏软件工程师成长笔记

DELL R730服务器U盘安装操作系统指南

1、DELL服务器安装系统,根据实际情况先做raid5,因为我们有3块硬盘; 2、安装系统前先把U盘做成启动盘,然后下载相应的阵列卡驱动,阵列卡驱动要先解压,...

9K3
来自专栏咖啡的代码人生

IntelliJ IDEA 使用JSTL标签库(IDEA 加载 tld文件)

这两天在 IntelliJ IDEA 中 使用 C标签(JSTL)的时候发现引入进来有问题,不但没提示而且还有红色警告,所以经过一番谷歌的查找之后解决了这个问...

5104
来自专栏zcqshine's blog

PHP 下载文件

3965
来自专栏世界第一语言是java

sb2.0新版springcloud微服务实战:Consul+Zuul+Feign/Ribbon+Hystrix Turbine+Config+sleuth+zipkin

本篇文章是springboot2.x升级后的升级springcloud专贴,因为之前版本更新已经好久了,好多人评论可不可以出个新版本,大家一定要注意,这是spr...

2362
来自专栏jiajia_deng

RESTful API 调试工具 insomnia

1205
来自专栏Java学习123

Maven学习问题解决

3078
来自专栏腾讯Bugly的专栏

腾讯Bugly Unity3D Plugin使用指南

概述 Bugly Unity Plugin是专为基于Unity引擎开发的跨移动平台(iOS/Android)游戏APP而开发的异常监控插件,它能够自动捕...

4555

扫码关注云+社区