棘轮会话存储


Ratchet Session storage

我是Ratchet和Symfony的新手。我正在努力熟悉它们。我使用了会话的替代品,这很奇怪,但有效。这是这样的:

在JS(本机PHP会话)中

name = "<?php echo $_SESSION['name']; ?>";
msg = elem.value;
socket.send(name+"|"+msg);

然后,发送的参数与分隔符| explode。它创建两个字符串。一个是名称,另一个是 msg,然后发送到除发件人之外的所有连接。

list($name, $message) = explode("|", $msg);

如何使用Symfony Session,当用户输入昵称时,它会保存昵称,并且可以通过MyApp命名空间中的聊天类访问它?

我有 API 文档,但没有使用会话的简单示例。 API Documentation .

树:

/www
 |
 |___/src
 |    |
 |    |____/MyApp/
 |           |
 |           |___Chat.php // The Chat Class
 |
 |___/bin
 |     |
 |     |___chat-server.php
 |
 |___/vendor
 |
 |___/chat.php // <-- Chat Room, sending and receiving here
 |
 |___/index.php // <-- Ask for nickname here
 |
 |___/composer.phar
 |
 |___/composer.lock
 |
 |___/main.js // <-- Index HTML javascript
 |
 |___/socket.js // <-- Websocket handler for char.php
 |
 |___/main.css // <-- All style

控制器可以在会话中将昵称设置为:

/**
 * @Route("/hello/{nickname}")
 */
public function indexAction($nickname)
{
    $session = $this->getRequest()->getSession();
    $session->set('nickname', $nickname);
}

要在聊天应用中检索昵称,

public function onOpen(ConnectionInterface $conn) 
{
    $nickname = $conn->Session->get('nickname');
}