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