RatchetPHP 没有用于新连接的 WebSocket 属性

Posted

技术标签:

【中文标题】RatchetPHP 没有用于新连接的 WebSocket 属性【英文标题】:RatchetPHP no WebSocket property for new connections 【发布时间】:2017-08-21 23:47:30 【问题描述】:

我正在尝试使用 Ratchet 在 Websocket 服务器的 onOpen 函数中访问传入连接的查询参数。 official documentation 和其他 *** 帖子都说您可以通过访问传递给函数的 ConnectionInterface 对象的 WebSocket 属性来做到这一点:

public function onOpen(ConnectionInterface $conn) 
    $query = $conn->WebSocket->request->getQuery();

但是,传入连接对象没有WebSocket 属性。当我启动此服务器并与客户端连接时,会发出一条通知,这会导致在 null 对象上调用函数时出现致命错误:

php 注意:未定义属性:Ratchet\Server\IoConnection::$WebSocket

我正在使用 PHP 7.0,我需要在我的 composer.json 中使用最新的稳定版本:

"require": 
    "cboden/ratchet": "^0.3.6"

我正在使用直接从Hello World 文档复制的代码连接 Chrome JS 控制台中的客户端:

var conn = new WebSocket('ws://localhost:8080?foo=bar');
conn.onopen = function(e) 
    console.log("Connection established!");
;

如果有帮助,我看到的 $conn 的唯一公共属性是:

bufferSize
stream
readable
writable
closing
loop
buffer
listenerse
decor

【问题讨论】:

嗯...我不确定文档在哪里,你能提供链接吗?通常你必须声明和“使用”特定的命名空间,然后调用那个类。你还记得是哪一课吗? 【参考方案1】:

我有同样的问题,我发现:

 $querystring = $conn->httpRequest->getUri()->getQuery();
 parse_str($querystring,$queryarray);

允许您访问查询参数。

【讨论】:

以上是关于RatchetPHP 没有用于新连接的 WebSocket 属性的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket简介

Ratchet PHP - 推送消息服务

有没有办法连接两个开放的CMD窗口;一个用于输入命令,另一个用于显示相应的输出?

Firefox 无法建立到 WSS 的连接

与jdbc连接时servlet没有响应

使用 stunnel 和 Ratchet 保护 websocket。连接已关闭