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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • map的containsKey方法

    map的containsKey方法map是一个key和value的键值对集合。map中的containKey(key)方法是判断该key在map中是否有key存在。如果存在则返回true,反之,返回false。程序实例:判断数组中是否有1,有的话就返回1和1所在的位置。我采用的是hashmap,在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1),时间消耗是很少的。packageTT04;importjava.util.Has…

    2022年6月23日
    107
  • executescalar mysql_ExecuteScalar

    executescalar mysql_ExecuteScalar这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

    2022年6月30日
    29
  • Effective_STL 学习笔记(十一) 理解自定义分配器的正确用法

    Effective_STL 学习笔记(十一) 理解自定义分配器的正确用法

    2021年6月17日
    93
  • Linux运维面试题2

    Linux运维面试题21.apache怎么实现负载均衡答案:多台机器跑apache,然后其中一台跑nginx,让nginx去代理多台apache实现负载均衡2.一台Linux服务器负载高,连接慢,怎么查看答案:先用w看负载多少,用top看哪个进程占用cpu高,同时用top按M看哪个进程占用内存多,用iotop看哪个进程读写频发,用sar命令或者nload命令查看网卡流量,是否跑满带宽3.现有A文件,编写shell…

    2022年6月5日
    65
  • 怎么清除火狐浏览器的cookie?

    怎么清除火狐浏览器的cookie?

    2021年10月15日
    45
  • [python机器学习及实践(2)]Sklearn实现朴素贝叶斯

    [python机器学习及实践(2)]Sklearn实现朴素贝叶斯

    2022年4月3日
    45

发表回复

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

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