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

作為Websocket客戶(hù)端時(shí),如何接收其他程序的調(diào)用?

國(guó)躍

問(wèn)題描述

我的問(wèn)題大致和下面這位的一致,就是我開(kāi)啟了Websocket客戶(hù)端和Websocket服務(wù)端連接成功后,我想從其他程序(同服務(wù)器中的其他框架項(xiàng)目)將消息推送給這個(gè)Websocket客戶(hù)端,從而和Websocket服務(wù)端進(jìn)行交互。
http://wtbis.cn/q/9045

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

我是剛剛開(kāi)始學(xué)習(xí),按照其他問(wèn)題的示例,我開(kāi)啟了一個(gè)text協(xié)議的worker,并通過(guò)global方式傳入websocket客戶(hù)端的worker。

<?php           
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;

require_once __DIR__ . '/vendor/autoload.php';

global $worker1;

$worker1 = new Worker();

$worker1->onWorkerStart = function($worker1){
    // ssl需要訪問(wèn)443端口
    $con = new AsyncTcpConnection('ws://im-dev.xxxx.com:443/ws/');
    $con->headers = [
        'Sec-WebSocket-Protocol' => 'xmpp',
    ];

    // 設(shè)置以ssl加密方式訪問(wèn),使之成為wss
    $con->transport = 'ssl';

    $con->onConnect = function($connection){
        echo "tcp connected\n";
    };

    $con->onWebSocketConnect = function(AsyncTcpConnection $con) {
        var_dump('onWebSocketConnect');
        $con->send("<open xmlns='urn:ietf:params:xml:ns:xmpp-framing' version='1.0'/>");
    };

    $con->onMessage = function(AsyncTcpConnection $con, $data) {
        global $worker1;

        var_dump('onMessage');
        var_dump($data);
        $worker1->con = $con;
    };

     // 連接上發(fā)生錯(cuò)誤時(shí),一般是連接遠(yuǎn)程websocket服務(wù)器失敗錯(cuò)誤
    $con->onError = function($connection, $code, $msg){
        echo "error: $msg\n";
    };

    $con->onClose = function($connection){
        echo "connection closed and try to reconnect\n";
        // 如果連接斷開(kāi),1秒后重連
        //$connection->reConnect(1);
    };

    $con->connect();
};

$worker2 = new Worker();
$worker2->onWorkerStart = function($worker2){
    // 開(kāi)啟一個(gè)內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符
    $inner_text_worker = new Worker('Text://0.0.0.0:5678');
    $inner_text_worker->onMessage = function($connection, $buffer)
    {
        global $worker1;
        // $data數(shù)組格式,里面有uid,表示向那個(gè)uid的頁(yè)面推送數(shù)據(jù)
        $data = json_decode($buffer, true);
        $uid = $data['uid'];
        var_dump('收到數(shù)據(jù)', $data);

        $worker1->con->send("<open xmlns='urn:ietf:params:xml:ns:xmpp-framing' version='1.0'/>");
        var_dump('23232323');

    };
    $inner_text_worker->listen();

};
Worker::runAll();

然后用push.php調(diào)用。

<?php
// 建立socket連接到內(nèi)部推送端口
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1); 
// 推送的數(shù)據(jù),包含uid字段,表示是給這個(gè)uid推送
$data = array('uid'=>'uid1', 'percent'=>'88%');
// 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符
fwrite($client, json_encode($data)."\n");
// 讀取推送結(jié)果
echo fread($client, 8192);

結(jié)果顯示我的global不起作用

截圖

是哪里出現(xiàn)了問(wèn)題,請(qǐng)大家指教一下。

759 2 0
2個(gè)回答

walkor 打賞

只啟動(dòng)一個(gè)worker1,不用啟動(dòng)worker2,worker2的代碼合并到worker1里

  • 國(guó)躍 2024-05-17

    放到了worker1里,但是執(zhí)行push.php時(shí)阻塞了,給websocket服務(wù)端發(fā)送消息也沒(méi)有成功。

  • 國(guó)躍 2024-05-17

    代碼放到了下面。請(qǐng)指點(diǎn)。

  • 國(guó)躍 2024-05-17

    解決了,text進(jìn)程的onMessage不使用global,使用use($worker1)。阻塞的問(wèn)題,把echo fread($client, 8192)去除掉就可以了。謝謝。

國(guó)躍

之前有寫(xiě)到同一個(gè)worker里,我又試了一下,然后推送時(shí)push.php阻塞了,第62行的發(fā)送消息也沒(méi)有發(fā)送成功。

<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;

require_once __DIR__ . '/vendor/autoload.php';

global $worker1;

// 建立與websocket服務(wù)端連接
$worker1 = new Worker();

$worker1->onWorkerStart = function($worker1){
    // ssl需要訪問(wèn)443端口
    $con = new AsyncTcpConnection('ws://im-dev.gooyee.com:443/ws/');
    $con->headers = [
        'Sec-WebSocket-Protocol' => 'xmpp',
    ];

    // 設(shè)置以ssl加密方式訪問(wèn),使之成為wss
    $con->transport = 'ssl';

    $con->onConnect = function($connection){
        echo "tcp connected\n";
    };

    $con->onWebSocketConnect = function(AsyncTcpConnection $con) {
        var_dump('onWebSocketConnect');
        $con->send("<open xmlns='urn:ietf:params:xml:ns:xmpp-framing' version='1.0'/>");
    };

    $con->onMessage = function(AsyncTcpConnection $con, $data)use($worker1) {
        global $worker1;

        var_dump('onMessage');
        var_dump($data);
        $worker1->con = $con;
    };

     // 連接上發(fā)生錯(cuò)誤時(shí),一般是連接遠(yuǎn)程websocket服務(wù)器失敗錯(cuò)誤
    $con->onError = function($connection, $code, $msg){
        echo "error: $msg\n";
    };

    $con->onClose = function($connection){
        echo "connection closed and try to reconnect\n";
        // 如果連接斷開(kāi),1秒后重連
        //$connection->reConnect(1);
    };

    $con->connect();

    // 開(kāi)啟一個(gè)內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符
    $inner_text_worker = new Worker('Text://0.0.0.0:5678');
    $inner_text_worker->onMessage = function($connection, $buffer)
    {
        global $worker1;
        // $data數(shù)組格式,里面有uid,表示向那個(gè)uid的頁(yè)面推送數(shù)據(jù)
        $data = json_decode($buffer, true);
        $uid = $data['uid'];
        var_dump('收到數(shù)據(jù)', $data);

        $worker1->con->send("<open xmlns='urn:ietf:params:xml:ns:xmpp-framing' version='1.0'/>");
        var_dump('23232323');

    };
    $inner_text_worker->listen();

};
Worker::runAll();
  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??