zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    Moonlight Shadow
    读《请尊重我的父亲大人》
    ctrl+alt+F1 开机之后直接进入终端怎么才能返回图形界面?
    MJJCN电台:我有一个梦想
    first time I use a portabledisk to boot the instal
    LoadRunner压力测试结果分析探讨
    测试用例正交分析法
    LoadRunner脚本编写之二
    Centos6.3(64位)下安装Oracle11gR2(64)服务器
    【网站性能指南】
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452922.html
Copyright © 2011-2022 走看看