我正在尝试使用 Ratchet 创建一个实时 Symfony 应用程序,但我不知道我应该将 WampServerInterface 和服务器脚本放在哪里(在 symfony 服务或某个类中)以及我应该如何从我的 appController 调用它
问问题
1454 次
2 回答
1
最好的方法是将您的提供者配置为服务,并通过构造函数或设置器注入将其注入控制器。
您也可以注入整个容器并从那里获取它,但出于性能和可测试性的原因,不建议这样做。
于 2013-05-25T22:24:41.687 回答
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...');
}
);
于 2014-02-13T17:57:24.983 回答