我正在使用symfony 2应用程序,我需要使用websocket.
我找到了一个名为GeniusesOfSymfony/WebSocketBundle的软件包,并将其集成到系统中.此捆绑包基于JDare/ClankBundle,但是firth具有TopicPeriodicTimerInterface用于每隔定义的时间重新发送客户端的信息.
我在我的应用程序中有它但我需要获取已登录的用户.该捆绑包有一个名为@ gos_web_socket.websocket.client_manipulator的服务来操纵用户信息,但是当我尝试获取用户信息时,只有该服务才能获得匿名用户,但我是为某个用户登录的.
任何有同样的问题或知道解决方案???
小智 2
我邀请您遵循会话共享和用户身份验证的过程,如您使用的捆绑包的文档中所述: https: //github.com/GeniusesOfSymfony/WebSocketBundle/blob/master/Resources/docs/SessionSetup.md
首先你需要实现一个Symfony会话处理程序,如果你决定使用PDO会话处理程序,文档在这里:http://symfony.com/doc/master/cookbook/configuration/pdo_session_storage.html(不要忘记创建相应的数据库(如果您选择这样做),声明所有服务、参数等)。
接下来,您必须设置 config.yml 以使用会话处理程序:
framework:
...
session:
handler_id: session.handler.pdo # adapt if you chose a different one
Run Code Online (Sandbox Code Playgroud)
设置 GOS Websocket 以便使用它:
gos_web_socket:
...
client:
firewall: main # the name of your firewall (can be an array if multiple)
session_handler: @session.handler.pdo
Run Code Online (Sandbox Code Playgroud)
第一个链接提供的文档末尾将向您展示一些使用客户端操纵器的方法。我知道复制粘贴更好,但我真的不觉得复制粘贴整个文档有用,也不清晰。
对于我自己的使用,我没有客户端操纵器,我只是使用
$this->clientStorage->getClient($connection->WAMP->clientStorageId);
Run Code Online (Sandbox Code Playgroud)
为了检索当前连接的用户。clientStorage如果将它 ( @gos_web_socket.client_storage) 作为参数提供给服务构造函数,则该值可用。当然,您需要调整您的构造函数:
class AcmeTopic implements TopicInterface
{
/**
* @param ClientStorageInterface $clientStorage
*/
protected $clientStorage;
public function __construct(ClientStorageInterface $clientStorage)
{
...
Run Code Online (Sandbox Code Playgroud)
要访问其他用户,您可以从以下方面获得一些灵感:
foreach($topic as $subscriber)
{
$subscriber->event($topic->getId(),
['msg' => $this->clientStorage
->getClient($connection->WAMP->clientStorageId)
->getUsername().' is now online!']);
}
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助,我对此没有太多经验,因为这也是我第一次使用。如果您仍然遇到困难(问题部分),我邀请您直接在 GitHub 上提问,因为作者可能可以为您提供更多帮助!
(另外,我假设你使用该主题)
| 归档时间: |
|
| 查看次数: |
2046 次 |
| 最近记录: |