作为ws客户端,如何关闭连接,然后重新连接一个新地址?

dignfei

因为ws地址类似这样:ws://127.0.0.1:8000/ws/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp

token每隔几分钟就会变,需要改变token,改变ws的连接地址。

如何在关闭当前连接,创建一个新连接?

workerman有一个很大的问题,就是只能创建,无法关闭。比如创建一个http服务,就只能一直开着,没有关闭的功能,无法灵活调整

1088 3 0
3个回答

li914

可以主动关闭啊 close 方法

  • dignfei 2022-02-28

    这个是作为服务端的时候用的,关闭别人。现在是作为客户端,关闭自己,然后关闭?

  • li914 2022-02-28

    客户端也可以关闭啊 连接时获取到了连接对象 connection 调用connection 上的 关闭连接方法

    $udp_connection = new AsyncUdpConnection('udp://127.0.0.1:1234');
    $udp_connection->onConnect = function(AsyncUdpConnection $udp_connection){
    $udp_connection->send('hi');
    };
    $udp_connection->onMessage = function(AsyncUdpConnection $udp_connection, $data){
    // 收到服务端返回的数据 hello
    echo "recv $data\r\n";
    // 关闭连接
    $udp_connection->close();
    };
    $udp_connection->connect();

xiuwang

close是关闭连接,然后重新new AsyncTcpConnection,重新设置onMessage等回调就行了

xiuwang
$worker->onWorkerStart = function(){
    // 每隔10秒用新token去连一次
    $token = md5(time());
    Timer::add(10, 'connect_with_token', [$token]);
};

function connect_with_token($token)
{
    static $connection;
    if ($connection) $connection->close();
    $connection = new AsyncTcpConnection('ws://127.0.0.1:8000/ws/?token='.$token);
    $connection->onMessage = function($connection, $data){
        var_dump($data);
    };
    $connection->connect();
}
  • 暂无评论
年代过于久远,无法发表回答
🔝