1. не надо работать с сокетами на php (то что вам предложили это костыль, который убивает весь смысл сокетов)
PHP синхронный язык, веб сокеты Асинхронные, работать крайне не наглядно. Держать открытое соединение на PHP, крайне дурная затея.
PS. Если вас приковали к батарее и заставляют, то вот примерное решение которое лишено смысла, но должно работать. После того как произойдет коннект и вы вернете данные вебсокет закроется.
Это лямбда функция, вам в нее просто нужно просто передать переменные в которых ждете результат
Возможно библеотека использует промисы, без классов тут не обойтись
<?php
class ClassName {
private $status = false;
private $result;
function connect($token)
{
\Ratchet\Client\connect('wss://ws.binaryws.com/websockets/v3?app_id=1089')->then(
function($conn) use ($token) {
$conn->on('message', function($msg) use ($conn) {
$msg_php = json_decode($msg, 1);
$this->result = $msg_php;
$conn->close();
});
$conn->send('{"authorize" : "'.$token.'"}');
$this->status = true;
});
}
function getResult()
{
if ($this->status) {
return null;
}
return $this->result;
}
}
$token = 'qwerty';
$obj = new ClassName();
$obj->connect($token);
$result = null;
for ($i = 0; $i < 3; $i++) {
$result = $obj->getResult();
if ($result != null) {
break;
}
sleep(1);
}
var_dump($result);
Так как вам нужен клиент, то скорее всего вы пишете какого-то бота, сделайте это лучше на Golang куда проще будет