Per prima cosa è necessario creare un servizio. Se vuoi iniettare il tuo gestore di entità e altre dipendenze, fallo lì.
In src/frontend/MyBundle/Resources/config/services.yml:
services:
chat:
class: MyApp\MyBundle\Chat
arguments:
- @doctrine.orm.default_entity_manager
E in src/frontend/MyBundle/file 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 ...
Quindi, fare una console comando per eseguire il server.
In src/frontend/MyBundle/Comando/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();
}
}
Ora avete una classe Chat con iniezioni di dipendenza, e si può eseguire il server come un comando di console. Spero che questo ti aiuti!
Grazie per la risposta, funziona per me. – Ajouve
Qualche idea su come eseguirlo su un servizio di hosting php medio? Non credo sia possibile aprire una porta come questa, né avere un processo in esecuzione per lunghi periodi di tempo (magari con un crontab hack?) – Jens
Non so di non essere in grado di usare una porta sul tuo servizio di hosting. Sembra qualcosa di cui devi parlare con il tuo fornitore! Puoi guardare questa risposta http://stackoverflow.com/questions/17696344/starting-a-websockets-server-in-php-on-shared-hosting/17705521#17705521 come esempio di come eseguire il tuo server come demone usando php. Ma se stai usando symfony, userei il componente Process piuttosto che popen e passthru. Se vuoi fare la domanda, posso mostrarti il codice che userò. – mattexx