Ratchet Symfony2.2

时间:2013-05-25 20:04:59

标签: php symfony real-time symfony-2.2 ratchet

我正在尝试使用Ratchet创建一个实时的Symfony应用程序,但我不知道我把WampServerInterface和我的服务器脚本放在哪里(在symfony服务中或只是某个类的某个地方)我该如何从我的appController中调用它? / p>

2 个答案:

答案 0 :(得分:1)

最好的方法是将提供程序配置为服务,并使用构造函数或setter注入将其注入控制器。

您也可以注入整个容器并从那里获取容器,但出于性能和可测试性原因,不建议这样做。

答案 1 :(得分:1)

首先,您需要从命令行运行棘轮服务器。

您可以选择使用symfony CLI,因为这是让您入门的最简单方法。我没有测试过以下任何代码,但以下代码会这样做。

<?php
namespace MyOrg\MyBundle\Command
{

    use 
        // Symcony CLI
        Symfony\Component\Console\Input\InputArgument,
        Symfony\Component\Console\Input\InputInterface,
        Symfony\Component\Console\Input\InputOption,
        Symfony\Component\Console\Output\OutputInterface,
        Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand,

        // Ratchet classes are used with full paths in execute() 

        // Your ratchet app class (e.g. https://github.com/cboden/Ratchet-examples/blob/master/src/Ratchet/Website/ChatRoom.php)
        MyOrg\MyBundle\MyRatchetAppClass;        

    class RatchetServerCommand extends ContainerAwareCommand
    {

        protected function configure(){
            $this
                ->setName('myorg:ratchet')
                ->setDescription('Start ratchet server');
        }

        protected function execute(InputInterface $input, OutputInterface $output)
        {

            $loop   = \React\EventLoop\Factory::create();
            $app = new MyRatchetAppClass();

            // Set up our WebSocket server for clients wanting real-time updates

            $webSock = new \React\Socket\Server($loop);

            $webSock->listen(88, 'YOURSERVER.COM');

            $webServer = new \Ratchet\Server\IoServer(
                new \Ratchet\Http\HttpServer(
                    new \Ratchet\WebSocket\WsServer(
                        new \Ratchet\Wamp\WampServer(
                            $app
                        )
                    )
                ),
                $webSock
            );

            $loop->run();            
        }
    }
}

然后使用symfony cli启动服务器:

php app/console myorg:ratchet

在此结束时,您将在端口88上运行棘轮服务器。

之后,使用websocket库进行连接和测试。我在下面的例子中使用[autobahnjs]:

ab.connect(
   // The WebSocket URI of the WAMP server
   'ws://yourserver.com:88',

   // The onconnect handler
   function (session) {
      alert('Connected');
   },

   // The onhangup handler
   function (code, reason, detail) {
      alert('unable to connect...');
   }
);