31

Symfony2 に websocket を実装しようとしていますが、

私はこれを見つけましたhttp://socketo.me/これはかなり良さそうです。

Symfony で試してみたところ、うまくいきました。telnet を使った単純な呼び出しでした。しかし、これを Symfony に統合する方法がわかりません。

サービスを作成する必要があると思いますが、どの種類のサービスとクライアントからそれを呼び出す方法が実際にはわかりません

ご協力いただきありがとうございます。

4

1 に答える 1

35

まず、サービスを作成する必要があります。エンティティ マネージャーとその他の依存関係を挿入する場合は、そこで行います。

src/MyApp/MyBundle/Resources/config/services.yml:

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

そして src/MyApp/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 ...

次に、サーバーを実行するコンソール コマンドを作成します。

src/MyApp/MyBundle/Command/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();
    }
}

これで、依存性注入を含む Chat クラスが作成され、サーバーをコンソール コマンドとして実行できるようになりました。お役に立てれば!

于 2013-07-08T20:49:09.877 に答える