TCP长连接数据传输(同步方式)[通俗易懂]

TCP长连接数据传输(同步方式)

大家好,又见面了,我是全栈君。

TCP长连接的应用场景

比如聊天室,游戏等应用,就会使用到长链接

服务端应用程序

CLI 挂载启动服务端程序:php server.php
swoole的运行模式,默认是多进程模式,worker进程数量官方建议设置为CPU核数的1-4倍

$serv = new swoole_server('127.0.0.1', 9501);

// 工作进程数量. 设置为CPU的1-4倍最合理
$serv->set([
    'worker_num' => 2,
]);

$serv->on('Connect', function ($serv, $fd) {
    echo "new client connected." . PHP_EOL;
});

$serv->on('Receive', function ($serv, $fd, $fromId, $data) {
    // 收到数据后发送给客户端
    $serv->send($fd, 'Server '. $data);
});

$serv->on('Close', function ($serv, $fd) {
    echo "Client close." . PHP_EOL;
});
$serv->start();

客户端应用程序

客户端启动发送数据:php client.php

new swoole_client(socket_type, sync_or_async) 有两个参数
第1参数:socket类型

SWOOLE_SOCK_TCP :创建tcp socket
SWOOLE_SOCK_TCP6:创建tcp ipv6 socket
SWOOLE_SOCK_UDP:创建udp socket
SWOOLE_SOCK_UDP6:创建udp ipv6 socket

第2参数:同步还是异步

SWOOLE_SOCK_SYNC :同步客户端
SWOOLE_SOCK_ASYNC :异步客户端

// 创建一个同步阻塞的tcp socket
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);

// 随后建立连接,连接失败直接退出并打印错误码
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");
// 向服务端发送数据
$client->send("hello server.");
// 从服务端接收数据
$response = $client->recv();
// 输出接受到的数据
echo $response . PHP_EOL;

// 关闭连接
$client->close();

TCP长连接数据传输(同步方式)[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111885.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab中@的用法[通俗易懂]

    matlab中@的用法[通俗易懂]@是用于定义函数句柄的操作符。函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用。举例:sin是matlab中的一个函数,但sin只是函数名,还不是函数句柄,不可以用于传参。f=@sin;这行代码定义了一个函数句柄,变量名是f。这样就可以当做参数传递了(这就是上面代码中的意义所在),而且还可以跟sin函数按相同的语法规则使用:g=f;%g也是函数句柄,其“值”和f一样…

    2022年7月17日
  • 移动硬盘不显示盘符提示初始化_移动硬盘插上系统起不来

    移动硬盘不显示盘符提示初始化_移动硬盘插上系统起不来一个2T的Seagate希捷移动硬盘,没有怎么用过,在笔记本上拷贝了几个文件就突然消失了,而且再次拔插USB线后发现仍然看不到硬盘盘符。但发现插上USB线后,任务栏中出现了USB插入硬盘的提示图标,看到这个我放心多了,至少表示电路是通的。于是打开了计算机管理,在磁盘管理中视图找到它,但始终没有它的身影双击后磁盘管理,出现了下面的对话框(这个时候千万要冷静,不要去初始化或者格式化,否则就麻烦了…

    2022年9月16日
  • IE浏览器安装插件(ocx)提示“windows 已经发现此文件有一个问题”怎么办?「建议收藏」

    IE浏览器安装插件(ocx)提示“windows 已经发现此文件有一个问题”怎么办?「建议收藏」当我们在win7操作系统中浏览网页,在有些网页需要登入账号密码需要安装插件才能够输入进去。一般我们只需按步骤下载安装插件就可以了。但是由用户反映,在下载好插件准备运行的时候,发现怎么样都安装不了,这样就无法登入账号了,该怎么办呢?接下来小编给大家介绍下解决方法。步骤:1、打开IE浏览器,在浏览器中点一下“alt”键,然后点击“工具”—“internet选项”;2、在

    2022年7月14日
  • fsockopen/curl/file_get_contents效率比较[通俗易懂]

    fsockopen/curl/file_get_contents效率比较

    2022年2月10日
  • 1/7的小数点后2020位的数字是_如果把数字5写在某自然数右端

    1/7的小数点后2020位的数字是_如果把数字5写在某自然数右端给定长度为 N 的整数序列 A,下标为 1∼N。现在要执行 M 次操作,其中第 i 次操作为给出三个整数 li,ri,ki,求 A[li],A[li+1],…,A[ri] (即 A 的下标区间 [li,ri])中第 ki 小的数是多少。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示整数序列 A。接下来 M 行,每行包含三个整数 li,ri,ki,用以描述第 i 次操作。输出格式对于每次操作输出一个结果,表示在该次操作中,第 k 小的数的数值。每个结果占一行。数据范围

    2022年8月10日
  • TCP的三次握手与四次挥手理解及面试题(很全面)

    TCP的三次握手与四次挥手理解及面试题(很全面)本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文…

    2022年5月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号