• 基于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}
    ");

    实验结果:

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

  • 相关阅读:
    数据库学习 ORA12545:因目标主机或对象不存在,连接失败
    Oracle创建命名空间和新用户
    创建一个命名空间
    修改用户密码
    Oracle启动
    数据库表中列类型的修改和ALTER的用法
    修改列类型
    IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表
    css:fixed定位兼容不同系列不同版本的浏览器包括IE6.0
    jQuery Google Charts一个封装google chart api的jquery插件 饼状图
  • 原文地址:https://www.cnblogs.com/zhengweizhao/p/9675020.html
Copyright © 2020-2023  润新知