如何在Symfony2中正确使用webSockets
我正在尝试在Symfony2中实现websockets,
我发现这个 http://socketo.me/ 看起来相当不错。
我从Symfony中尝试了它,它的工作原理,这只是一个使用telnet的简单调用。但我不知道如何将其集成到Symfony中。
我认为我必须创建一个服务,但我不知道哪种服务以及如何从客户端调用它
感谢您的帮助。
我正在尝试在Symfony2中实现websockets,
我发现这个 http://socketo.me/ 看起来相当不错。
我从Symfony中尝试了它,它的工作原理,这只是一个使用telnet的简单调用。但我不知道如何将其集成到Symfony中。
我认为我必须创建一个服务,但我不知道哪种服务以及如何从客户端调用它
感谢您的帮助。
首先,您应该创建一个服务。如果要注入实体管理器和其他依赖项,请在此处执行此操作。
In src/MyApp/MyBundle/Resources/config/services.yml:
services:
    chat:
        class: MyApp\MyBundle\Chat
        arguments: 
            - @doctrine.orm.default_entity_manager
在 src/MyApp/MyBundle/Chat.php:
class Chat implements MessageComponentInterface {
    /**
     * @var \Doctrine\ORM\EntityManager
     */
    protected $em;
    /**
     * Constructor
     *
     * @param \Doctrine\ORM\EntityManager $em
     */
    public function __construct($em)
    {
        $this->em = $em;
    }
    // onOpen, onMessage, onClose, onError ...
接下来,创建控制台命令以运行服务器。
在 src/MyApp/MyBundle/Command/ServerCommand 中.php
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Ratchet\Server\IoServer;
class ServerCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this
            ->setName('chat:server')
            ->setDescription('Start the Chat server');
    }
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $chat = $this->getContainer()->get('chat');
        $server = IoServer::factory($chat, 8080);
        $server->run();
    }
}
现在,您有一个具有依赖关系注入的 Chat 类,并且可以将服务器作为控制台命令运行。希望这有帮助!