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


相关推荐

  • 你知道织梦后台安装插件时为什么会出现这个Character postion 686, ‘item’&n

    你知道织梦后台安装插件时为什么会出现这个Character postion 686, ‘item’&n

    2021年9月24日
    44
  • Java 事务注解(java自定义注解实现)

    @Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Transactional(rollbackFor=Exception.class,noRo…

    2022年4月15日
    37
  • GSLB功能

    GSLB功能GSLB应为一个高效率的智能的DNS服务器,并且可以在基于负载均衡算法的基础上对定义好的域名进行解析。可从如下角度来分析GSLBDNS功能以及标准性对GSLB架构设计算法设计1.严格遵守DNS的相关标准。概括的说是性能优良,功能全面。做为负载均衡设备,性能始终是非常重要的。要能实习高负载大流量下对DNS请求的迅速应答。在功能实现方面DNS相关RFC(rfc1034,…

    2022年6月8日
    83
  • 怎样使用父组件向子组件传值【 必看】

    怎样使用父组件向子组件传值【 必看】呃呃,首先小仙女初学Vue传值的时候,是费尽了脑汁,不知道怎么回事。终于,功夫不负有心人,把他弄明白了,如有错误,请多指教!!首先在学习Vue的框架开发的项目过程中,会经常会用到组件来管理不同的功能,有些公共的东西会就会被抽取出来,当做组件去使用。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?就先和小编一起探究一下吧!父向子传递…

    2022年5月4日
    79
  • Laravel / PHP 扩展包视频教程

    Laravel / PHP 扩展包视频教程

    2021年10月26日
    51
  • mybtis jdbctype

    mybtis jdbctype思路:1.在mapper.xml中使用#{参数,jdbctype=VARCHAR}2.在javadao层中使用传入map的方式3.mybatis中就可以应用字段了mybatisjdbctype写法daomapper.xml例子:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapper…

    2022年10月20日
    2

发表回复

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

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