国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

tcp和websocket協(xié)議同時存在時,tcp發(fā)送數(shù)據(jù)后會把websocket用戶給踢掉,求解

追夢隨想

問題描述

目前在做一個物聯(lián)網(wǎng)系統(tǒng),demo的Gateway用來做設(shè)備的tcp連接,

$gateway = new Gateway("tcp://0.0.0.0:8282");
$gateway->startPort = 2900;

又新建了一個websocket的Gateway用來做網(wǎng)頁的連接

$gateway = new Gateway("websocket://0.0.0.0:1234");
$gateway->startPort = 3000;

然后用網(wǎng)頁連接了websocket端口,用tcp測試工具連接了tcp端口,當(dāng)其中一個終端發(fā)消息時其他終端都可以收到消息,這是沒問題的,但是tcp端發(fā)送消息后會把websocket端口所有用戶踢掉線,試了幾次都是如此。

目前是測試domo,基本上沒有太多的改動,所以不是代碼的問題,這究竟是為什么?
測試環(huán)境windows10 64位

為此你搜索到了哪些方案及不適用的原因

暫時沒找到同樣的問題。

1187 3 0
3個回答

Gin

懷疑是 websocket 接收到消息了, 處理過程報錯, 導(dǎo)致掉線了

  • 追夢隨想 2023-05-11

    網(wǎng)頁端沒有收到消息,直接掉線,代碼還是下載的demo,啥也沒改

        /**
         * 當(dāng)客戶端連接時觸發(fā)
         * 如果業(yè)務(wù)不需此回調(diào)可以刪除onConnect
         * 
         * @param int $client_id 連接id
         */
        public static function onConnect($client_id)
        {
            // 向當(dāng)前client_id發(fā)送數(shù)據(jù) 
            Gateway::sendToClient($client_id, "Hello $client_id\r\n");
            // 向所有人發(fā)送
            Gateway::sendToAll("$client_id login\r\n");
        }
    
       /**
        * 當(dāng)客戶端發(fā)來消息時觸發(fā)
        * @param int $client_id 連接id
        * @param mixed $message 具體消息
        */
       public static function onMessage($client_id, $message)
       {
            // 向所有人發(fā)送 
            Gateway::sendToAll("$client_id said $message\r\n");
       }
    
       /**
        * 當(dāng)用戶斷開連接時觸發(fā)
        * @param int $client_id 連接id
        */
       public static function onClose($client_id)
       {
           // 向所有人發(fā)送 
           GateWay::sendToAll("$client_id logout\r\n");
       }
  • Gin 2023-05-11

    websocket 業(yè)務(wù)代碼看下

  • 追夢隨想 2023-05-11
    <?php
    
    /**
     * websocket 請求網(wǎng)關(guān)
     */
    
    use \Workerman\Worker;
    use \Workerman\WebServer;
    use \GatewayWorker\Gateway;
    use \GatewayWorker\BusinessWorker;
    use \Workerman\Autoloader;
    
    // 自動加載類
    require_once __DIR__ . '/../../vendor/autoload.php';
    
    // gateway 進程,這里使用Text協(xié)議,可以用telnet測試
    $gateway = new Gateway("websocket://0.0.0.0:1234");
    
    // gateway名稱,status方便查看
    $gateway->name = 'websocketGateway';
    // gateway進程數(shù)
    $gateway->count = 4;
    // 本機ip,分布式部署時使用內(nèi)網(wǎng)ip
    $gateway->lanIp = '127.0.0.1';
    // 內(nèi)部通訊起始端口,假如$gateway->count=4,起始端口為4000
    // 則一般會使用4000 4001 4002 4003 4個端口作為內(nèi)部通訊端口
    $gateway->startPort = 3000;
    // 服務(wù)注冊地址
    $gateway->registerAddress = '127.0.0.1:1238';
    
    // 心跳間隔
    // $gateway->pingInterval = 40;
    
    // 連續(xù)幾次沒有心跳則斷開連接
    // $gateway->pingNotResponseLimit = 1;
    
    // 如果不是在根目錄啟動,則運行runAll方法
    if(!defined('GLOBAL_START'))
    {
        Worker::runAll();
    }
    
walkor 打賞

因為看到亂碼了,可能編碼問題。websocket通訊必須是utf8編碼,你的這個tcp客戶端發(fā)的消息可能不是utf8編碼。

  • Gin 2023-05-11

    一發(fā)中文就掉 編碼的問題

  • 追夢隨想 2023-05-11

    好的,感謝,經(jīng)過測試確實是編碼問題,如果發(fā)送數(shù)字和字母不會出現(xiàn)掉線情況,這是個TCP測試工具帶來的問題

Gin
  • 追夢隨想 2023-05-11

    感謝,如果發(fā)送數(shù)字和字母不會出現(xiàn)掉線情況,這是個TCP測試工具帶來的問題

  • 追夢隨想 2023-05-11

    經(jīng)過測試確實是編碼問題

年代過于久遠(yuǎn),無法發(fā)表回答
??