• 基于Swoole 的TCP实现简单群聊天室


    有为青年总是在空闲的时候学习点知识。

    TCP服务器的代码:

    <?php
    $serv = new swoole_server('0.0.0.0',9502,SWOOLE_PROCESS,SWOOLE_SOCK_TCP);
    $serv->set([
        'work_num'=>4
    ]);
    $serv->on('connect',function($serv,$fd){
        //连接事件
    });
    $serv->on('receive',function($serv,$fd,$fromid,$data){
            if(!empty($serv->connection_list())){
                foreach($serv->connection_list() as $s ){
                    //不给自己发信息,只给其他的连接用户发
                    if($s != $fd){
                        //$data是客户端发送过来的信息
                        $serv ->send($s,$data,$fd);
                    }
                }
            }
    });
    $serv->on('close',function($serv,$fd){
        //关闭事件
    });
    $serv->start();

    客户端的代码(用Swoole定时器模拟持续的发送聊天信息,同时用不同的随机数区分不同的信息):

    <?php
    
    //异步tcp客户端
    $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
    //连接服务端
    $client->on("connect", function(swoole_client $cli) {
        //用随机数区分不同的信息
        //下面用一个Swoole的定时器来模拟持续的发送聊天信息
        swoole_timer_tick(3000,function()use($cli){
            $code = rand(10000, 99999);
            $cli->send('测试情况'.$code);
        });
    });
    
    //接收到服务端发送的消息时触发的
    $client->on('receive', function ($cli, $data) {
        //考虑粘包的问题
        echo $data;
    });
    
    $client->on('error', function ($cli) {
    });
    //监听连接关闭事件,客服端关闭,或者服务器主动关闭
    $client->on('close', function ($cli) {
    });
    
    //先绑定事件之后随后建立连接,连接失败直接退出并打印错误码
    $client->connect('127.0.0.1', 9502) || exit("connect failed. Error: {$client->errCode}
    ");

    实验结果:

    优化:设置心跳检测,粘包处理,配置服务器

  • 相关阅读:
    Struts2学习笔记《三》
    《Shiro框架》shiro学习中报错解决方法
    android
    MAC 设置环境变量path的几种方法
    利用ant脚本 自动构建svn增量/全量 系统程序升级包
    Jenkins2 插件 Pipeline+BlueOcean 实现持续交付的初次演练
    Jenkins2 实现持续交付初次演练(MultiJob,Pipeline,Blue Ocean)
    jenkins2 -pipeline 常用groovy脚本
    jenkins2 pipeline介绍
    scala学习(1)----map和flatMap的区别
  • 原文地址:https://www.cnblogs.com/zhengweizhao/p/9675020.html
Copyright © 2020-2023  润新知