我正在尝试onOpen使用 Ratchet 访问 Websocket 服务器函数中传入连接的查询参数。官方文档和其他StackOverflow帖子都说您可以通过访问传递给函数的对象WebSocket的属性来做到这一点:ConnectionInterface
public function onOpen(ConnectionInterface $conn) {
$query = $conn->WebSocket->request->getQuery();
}
Run Code Online (Sandbox Code Playgroud)
WebSocket但是,传入连接对象没有属性。当我启动该服务器并与客户端连接时,会发出一条通知,这会导致在对象上调用函数时出现致命错误null:
PHP 注意:未定义属性:Ratchet\Server\IoConnection::$WebSocket
我正在使用 PHP 7.0,并且我需要最新的稳定版本composer.json:
"require": {
"cboden/ratchet": "^0.3.6"
}
Run Code Online (Sandbox Code Playgroud)
我还使用直接从Hello World文档复制的代码在 Chrome JS 控制台中连接客户端:
var conn = new WebSocket('ws://localhost:8080?foo=bar');
conn.onopen = function(e) {
console.log("Connection established!");
};
Run Code Online (Sandbox Code Playgroud)
如果有帮助,我看到的唯一公共属性$conn是:
bufferSize
stream
readable
writable
closing
loop
buffer
listenerse
decor
Run Code Online (Sandbox Code Playgroud) 嗨,我正在使用radchet websocket.我很难从对象变量中获取数据.
请检查我的代码:
var conn = new WebSocket('ws://localhost:8080?user_id=10&receiver_id=20');
$querystring = $conn->WebSocket->request->getQuery();
print_r($querystring);
Run Code Online (Sandbox Code Playgroud)
输出:
Guzzle\Http\QueryString Object
(
[fieldSeparator:protected] => &
[valueSeparator:protected] => =
[urlEncode:protected] => RFC 3986
[aggregator:protected] =>
[data:protected] => Array
(
[user_id] => 10
[receiver_id] => 20
)
)
Run Code Online (Sandbox Code Playgroud)
上面的代码我想user_id和receiver_id,但我无法得到.
我的代码:
echo $querystring->data:protected['user_id'];
echo $querystring->data:protected['receiver_id'];
Run Code Online (Sandbox Code Playgroud)
我已经回应但收到错误消息.请帮我.
编辑:
如果我将对象转换为数组,则表示格式不正确.见下文.
$array = (array) $querystring;
print_r($array);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[ * fieldSeparator] => &
[ * valueSeparator] => =
[ * urlEncode] => RFC 3986
[ * aggregator] …Run Code Online (Sandbox Code Playgroud)