atipik / hoa-websocket-bundle
Requires
- php: >=5.4
- hoa/websocket: ~3.0
- symfony/console: >=2.3
- symfony/framework-bundle: >=2.3
Requires (Dev)
- atoum/atoum: dev-master
This package is not auto-updated.
Last update: 2024-09-28 16:37:59 UTC
README
此包允许您在Symfony2中使用Hoa/Websocket/Server和Hoa/Websocket/Client。
通过简单的配置,您将能够启动您的WebSocket服务器
1. 安装
1.1 更新您的composer.json文件
在require部分添加以下行
{ "require": { "atipik/hoa-websocket-bundle" : "1.*@dev" } }
1.2 安装依赖项
composer update
1.3 更新您的AppKernel.php文件
<?php # app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Atipik\Hoa\WebSocketBundle\AtipikHoaWebSocketBundle(), // ... ); return $bundles; } // ... }
1.4 配置您的项目
要启用此包,您必须在config.yml中添加以下行
# app/config/config.yml atipik_hoa_web_socket: ~
您还可以指定地址和端口。
# app/config/config.yml atipik_hoa_web_socket: address : 1.3.3.7 port : 4242
默认情况下,服务器将在127.0.0.1:8080上启动
2. 架构
Symfony 2命令php app/console hoa:websocketserver
只有一个任务:调用运行器。
运行器将模块(您的逻辑代码)和由Atipik\Hoa\WebSocketBundle\WebSocket\Server
管理的WebSocket事件链接起来。
当WebSocket服务器接收到事件时,运行器会捕获它并调用所有已订阅的模块。
3. 服务器
3.1 简单用法
- 在您的包中,创建一个扩展
Atipik\Hoa\WebSocketBundle\WebSocket\Module\Module
的类
<?php # src/My/Bundle/WebSocket/Module/MyModule.php namespace My\Bundle\WebSocket\Module; use Atipik\Hoa\WebSocketBundle\WebSocket\Module\Module; class MyModule extends Module { }
- 更新您的
services.yml
# src/My/Bundle/Resources/config/services.yml services: my_bundle.my_module: class: My\Bundle\WebSocket\Module\MyModule tags: - { name: atipik_hoa_web_socket.module }
别忘了添加atipik_hoa_web_socket.module
标签!
- 在这个类中,实现
getSubscribedEvents
方法
<?php # src/My/Bundle/WebSocket/Module/MyModule.php namespace My\Bundle\WebSocket\Module; use Atipik\Hoa\WebSocketBundle\WebSocket\Module\Module; class MyModule extends Module { public function getSubscribedEvents() { return array( 'open' => 'onOpen', 'message' => 'onMessage', ); } }
- 添加逻辑代码
您可以使用$this->getBucket()
获取当前bucket。
<?php # src/My/Bundle/WebSocket/Module/MyModule.php namespace My\Bundle\WebSocket\Module; use Atipik\Hoa\WebSocketBundle\WebSocket\Module\Module; class MyModule extends Module { public function getSubscribedEvents() { return array( 'open' => 'onOpen', 'message' => 'onMessage', ); } public function onOpen() { $this->getLogger()->log('Here comes a new challenger !'); } public function onMessage() { $data = $this->getBucket()->getData(); $this->getLogger()->log( 'Data received in %s: %s', __METHOD__, $data['message'] ); } }
- 启动您的WebSocket服务器
php app/console hoa:websocketserver
3.2 高级用法
3.2.1 模块组
如果您想扩展服务器,可以将模块分配给不同的组,并为一个或多个组启动服务器。
您可以在同一个组中分配许多模块
如果您不指定组启动服务器,则将使用所有模块。
- 只需在您的模块中重写
getGroup()
方法
<?php # src/My/Bundle/WebSocket/Module/MyModule.php namespace My\Bundle\WebSocket\Module; use Atipik\Hoa\WebSocketBundle\WebSocket\Module\Module; class MyModule extends Module { // ... /** * Returns group name * * @return string */ public function getGroup() { return 'foo'; } // ... }
- 指定组启动服务器
php app/console hoa:websocketserver -g foo
您也可以指定多个组
php app/console hoa:websocketserver -g foo -g bar
3.2.2 重写运行器类
如果您想修改运行器的工作方式,应重写其类
- 创建一个扩展
Atipik\Hoa\WebSocketBundle\WebSocket\Runner
的运行器类。 - 更新您的
services.yml
# src/My/Bundle/Resources/config/services.yml parameters: atipik_hoa_web_socket.runner.class: My\Bundle\WebSocket\Runner
3.2.3 重写服务器类
如果您想修改WebSocket服务器的工作方式,应重写其类
- 创建一个扩展
Atipik\Hoa\WebSocketBundle\WebSocket\Server
的服务器类。 - 更新您的
services.yml
# src/My/Bundle/Resources/config/services.yml parameters: atipik_hoa_web_socket.server.class: My\Bundle\WebSocket\Server
3.2.4 重写节点类
Hoa/Websocket允许您重写节点类以添加您自己的数据。
当然,此包允许您指定要使用哪个类
- 创建一个扩展
Hoa\Websocket\Node
的节点类
<?php # src/My/Bundle/WebSocket/Node.php namespace My\Bundle\WebSocket; class Node extends \Hoa\Websocket\Node { protected $myData; public function getMyData() { return $this->myData; } public function setMyData($data) { $this->myData = $data; return $this; } public function doThingsWithMyData() { // ... } }
- 更新您的
services.yml
# src/My/Bundle/Resources/config/services.yml parameters: atipik_hoa_web_socket.node.class: My\Bundle\WebSocket\Node
- 现在,您可以访问当前节点,即您的节点类的实例
<?php # src/My/Bundle/WebSocket/Module/MyModule.php namespace My\Bundle\WebSocket\Module; use Atipik\Hoa\WebSocketBundle\WebSocket\Module\Module; class MyModule extends Module { // ... public function onEvent1() { // ... $node = $this->getNode(); $node->setMyData('foobar'); // .. } // ... public function onEvent2() { // ... $node = $this->getNode(); $node->getMyData(); // contain 'foobar' set in event1 // .. } // ... }
4. 客户端
如果您想与WebSocket服务器通信,可以使用服务atipik_hoa_web_socket.client
,通过在控制器中使用$this->get('atipik_hoa_web_socket.client')
或在services.yml中直接注入此服务。
有关WebSocket客户端的更多文档,请参阅Hoa/WebSocket的文档。
5. 运行单元测试
composer update ./vendor/bin/atoum
6. 更多文档
请参阅Hoa/WebSocket的文档以了解如何使用Hoa/WebSocket并查看JavaScript代码示例。