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

相关文章

来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4868
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4848
来自专栏落花落雨不落叶

canvas画简单电路图

61111
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2060
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4708
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2567
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4015
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2702

扫码关注云+社区