2013-07-08 4 views
27

yılında WebSockets nasıl kullanmak ben düzgün Symfony2'de

oldukça iyi görünüyor bu http://socketo.me/ bulundu Symfony2'deki Yuvalarının uygulamaya çalışıyorum.

Symfony'den çıkarıyorum ve işe yarıyor, bu sadece telnet kullanarak yapılan basit bir çağrıydı. Ama bunu Symfony'de nasıl bütünleştireceğimi bilmiyorum.

Ben bir hizmet oluşturmak zorunda düşünüyorum ama servisin hangi tür ve ne kadar müşteriden Yardımlarınız için

Teşekkür aramak gerçekten bilmiyorum.

cevap

32

İlk önce bir hizmet oluşturmalısınız. Varlık yöneticinizi ve diğer bağımlılıkları enjekte etmek istiyorsanız, orada yapın. src yılında

/BenimUygulamam/MyBundle/Kaynaklar/config/services.yml:

services: 
    chat: 
     class: MyApp\MyBundle\Chat 
     arguments: 
      - @doctrine.orm.default_entity_manager 

Ve src

/Uygulamam/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 ... 

Sonra, bir konsol yapmak sunucuyu çalıştırmak için komut.

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(); 
    } 
} 

src/BenimUygulamam/MyBundle/Komut/ServerCommand.php yılında

Şimdi bağımlılık enjeksiyonu ile Sohbet sınıf var ve bir konsol komutu olarak sunucuyu çalıştırabilir. Bu yardımcı olur umarım!

+0

Cevabınız için teşekkürler, benim için çalışıyor. – Ajouve

+0

Bunu ortalama bir php barındırma hizmeti üzerinde nasıl çalıştıracağınıza dair herhangi bir fikir var mı? Böyle bir limanı açmak mümkün değil, uzun süreler boyunca çalışan bir işlem yapmak da mümkün değil (belki de bir crontab hack ile) – Jens

+1

Sizin için bir port kullanamayacağımı bilmiyorum barındırma hizmeti. Sağlayıcınızla konuşmanız gereken bir şey gibi geliyor! Sunucunuzu nasıl çalıştıracağınıza örnek olarak http://stackoverflow.com/questions/17696344/starting-a-websockets-server-in-php-on-shared-hosting/17705521#17705521 adresine bakabilirsiniz. php kullanarak daemon. Ama eğer symfony kullanıyorsan, Proses bileşenini popen ve passthru yerine kullanırdım. Soruyu sormak isterseniz, kullanacağım kodu gösterebilirim. – mattexx