成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

私聊(PHP 實(shí)現(xiàn))

senntyou / 961人閱讀

摘要:服務(wù)端設(shè)置阻塞模式在現(xiàn)有資源列表中找不到給定資源對(duì)應(yīng)的索引在現(xiàn)有資源列表中找不到給定用戶對(duì)應(yīng)的客戶端資源監(jiān)聽客戶端連接監(jiān)聽客戶端消息來(lái)自客戶端的消息客戶端接受客戶端發(fā)來(lái)的消息下午時(shí)間到來(lái)自的消息客戶端發(fā)送消息給客戶端下午時(shí)間到來(lái)

服務(wù)端
$url = "tcp://0.0.0.0:9160";

$stream = stream_socket_server($url , $errno , $errstr);

// 設(shè)置阻塞模式
stream_set_blocking($stream , false);

$client_list = [];

$resource_list = [];

$resource_list[] = $stream;

$find= function($client) use(&$client_list){
   foreach ($client_list as $k => $v)
   {
       if ($v["resource"] === $client) {
           return $k;
       }
   }

   echo "在現(xiàn)有資源列表中找不到給定資源對(duì)應(yīng)的索引" . PHP_EOL;

   return false;
};

$find_client = function($username) use(&$client_list) {
    foreach ($client_list as $v)
    {
        if ($v["username"] === $username) {
            return $v["resource"];
        }
    }

    echo "在現(xiàn)有資源列表中找不到給定用戶對(duì)應(yīng)的客戶端資源" . PHP_EOL;

    return false;
};

while (true)
{
    $read = $resource_list;
    $write = $resource_list;
    $except = [];
    $wait_s = 0;
    $wait_us = 0;

    stream_select($read , $write , $except , $wait_s , $wati_us);

    foreach ($read as $v)
    {
        if ($v === $stream) {
            // 監(jiān)聽客戶端連接
            $client = stream_socket_accept($v);

            if (is_resource($client)) {
                $resource_list[] = $client;

                $client_list[] = [
                    "username" => null ,
                    "resource" => $client
                ];
            }
        } else {
            $index = $find($v);
            $user  = $client_list[$index];

            // 監(jiān)聽客戶端消息
            $msg = fread($v , 65535);

            if (!empty($msg)) {
                if (!is_null($user) && is_null($user["username"]) && preg_match("/username:(w+)/" , $msg , $matches) === 1) {
                    $client_list[$index]["username"] = $matches[1];
                } else {
                    $msg = unserialize($msg);

                    $client = $find_client($msg["to"]);

                    if ($client !== false) {
                        fwrite($client , serialize($msg));
                    } else {
                        echo "來(lái)自客戶端的消息:from:{$msg["from"]};to:{$msg["to"]};msg:{$msg["msg"]}
";
                    }
                }
            }
        }
    }

    usleep(100 * 1000);
}
客戶端 A(接受客戶端 B 發(fā)來(lái)的消息)
 $username ,
    "to" => "yueshu" ,
    "msg" => "hello girl"
];

$is_flag = false;

while (true)
{
    $e_time = time();

    if ($e_time - $s_time > $duration) {
        echo "20s 時(shí)間到" . PHP_EOL;
        break;
    }

    if (!$is_flag) {
        fwrite($client , "username:" . $username);

        $is_flag = true;
    } else {
        // $sends = serialize($send);

        // fwrite($client , $sends);
    }

    $msg = fread($client , 65535);

    if (!empty($msg)) {
        $msg = unserialize($msg);

        echo "來(lái)自{$msg["from"]}的消息:{$msg["msg"]}
";
    }

    usleep(10 * 1000);
}
客戶端 B(發(fā)送消息給客戶端 A)
 $username ,
    "to" => "chenxuelong" ,
    "msg" => "hello boy"
];

$is_flag = false;

while (true)
{
    $e_time = time();

    if ($e_time - $s_time > $duration) {
        echo "20s 時(shí)間到" . PHP_EOL;
        break;
    }

    if (!$is_flag) {
        fwrite($client , "username:" . $username);

        $is_flag = true;
    } else {
        $send = serialize($msg);

        fwrite($client , $send);
    }

    /*
    $msg = fread($client , 65535);

    if (!empty($msg)) {
        $msg = unserialize($msg);

        echo "來(lái)自{$msg["from"]}的消息:{$msg["msg"]}
";
    }
    */

    sleep(1);
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30684.html

相關(guān)文章

  • PHP即時(shí)通訊設(shè)計(jì)實(shí)現(xiàn)

    摘要:即時(shí)通訊中,最重要的是響應(yīng)速度,我們需要展示消息列表那么這時(shí)會(huì)有未讀消息,未讀數(shù)量,最后一條消息內(nèi)容,時(shí)間等等。目前設(shè)計(jì)是單表單庫(kù)。這里只是對(duì)即時(shí)通訊設(shè)計(jì)上做了一些簡(jiǎn)要的闡述,如有疑問(wèn)和建議,請(qǐng)?jiān)谠u(píng)論區(qū)回復(fù)。 詳解即時(shí)通訊設(shè)計(jì)實(shí)現(xiàn)(PHP+GatewayWorker+Redis) 需要實(shí)現(xiàn)的功能 一對(duì)一聊天(私聊) 一對(duì)多聊天(群聊) 類似QQ,微信等聊天列表 實(shí)時(shí)消息 顯示 工具...

    asoren 評(píng)論0 收藏0
  • PHP即時(shí)通訊設(shè)計(jì)實(shí)現(xiàn)

    摘要:即時(shí)通訊中,最重要的是響應(yīng)速度,我們需要展示消息列表那么這時(shí)會(huì)有未讀消息,未讀數(shù)量,最后一條消息內(nèi)容,時(shí)間等等。目前設(shè)計(jì)是單表單庫(kù)。這里只是對(duì)即時(shí)通訊設(shè)計(jì)上做了一些簡(jiǎn)要的闡述,如有疑問(wèn)和建議,請(qǐng)?jiān)谠u(píng)論區(qū)回復(fù)。 詳解即時(shí)通訊設(shè)計(jì)實(shí)現(xiàn)(PHP+GatewayWorker+Redis) 需要實(shí)現(xiàn)的功能 一對(duì)一聊天(私聊) 一對(duì)多聊天(群聊) 類似QQ,微信等聊天列表 實(shí)時(shí)消息 顯示 工具...

    luckyyulin 評(píng)論0 收藏0
  • PHP即時(shí)通訊設(shè)計(jì)實(shí)現(xiàn)

    摘要:即時(shí)通訊中,最重要的是響應(yīng)速度,我們需要展示消息列表那么這時(shí)會(huì)有未讀消息,未讀數(shù)量,最后一條消息內(nèi)容,時(shí)間等等。目前設(shè)計(jì)是單表單庫(kù)。這里只是對(duì)即時(shí)通訊設(shè)計(jì)上做了一些簡(jiǎn)要的闡述,如有疑問(wèn)和建議,請(qǐng)?jiān)谠u(píng)論區(qū)回復(fù)。 詳解即時(shí)通訊設(shè)計(jì)實(shí)現(xiàn)(PHP+GatewayWorker+Redis) 需要實(shí)現(xiàn)的功能 一對(duì)一聊天(私聊) 一對(duì)多聊天(群聊) 類似QQ,微信等聊天列表 實(shí)時(shí)消息 顯示 工具...

    leejan97 評(píng)論0 收藏0
  • 5分鐘解決小程序的微信支付

    摘要:,之前在寫過(guò)一篇微信支付教程手把手教你實(shí)現(xiàn)小程序的微信支付。說(shuō)說(shuō)必須要自己填寫的東西開頭的這幾個(gè)信息都可以從小程序后臺(tái)微信支付申請(qǐng)成功后發(fā)的郵件中拿到。 你好,是我琉憶,一個(gè)文藝的程序員。 很久沒(méi)有更新什么技術(shù)文了,特在此補(bǔ)上一篇精華文章——微信支付。PS,之前在segmentfault寫過(guò)一篇微信支付教程:手把手教你實(shí)現(xiàn)小程序的微信支付。【從發(fā)表開始,到現(xiàn)在被很多人收藏,加微信和QQ...

    forsigner 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<