webloopio / nette-websockets
Nette 扩展,用于实现灵活且简单的 WebSocket 服务器
dev-master
2018-09-17 10:38 UTC
Requires
- php: >=7.0.0
- cboden/ratchet: ^0.4.1
- gedmo/doctrine-extensions: ^2.4
- kdyby/console: ^2.7
- nette/application: ~2.4
- nette/di: ~2.4
- nette/http: ~2.4
- nette/reflection: ~2.4
- nette/utils: ~2.4
Requires (Dev)
- nette/bootstrap: ~2.4
- nette/robot-loader: ~2.4
- nette/safe-stream: ~2.3
- nette/tester: ^2.0
- ratchet/pawl: ^0.3.2
- tracy/tracy: ^2.5
This package is not auto-updated.
Last update: 2024-09-29 05:14:58 UTC
README
安装
通过 composer 安装此包
$ composer require webloopio/nette-websockets
设置和启动
在 Nette 配置.neon 中启用所需扩展。我们使用 Kdyby/Console 来运行命令。
extensions: netteWebsockets: Webloopio\NetteWebsockets\DI\NetteWebsocketsExtension console: Kdyby\Console\DI\ConsoleExtension
要从您的 Nette 项目根目录启动 WebSocket 服务器,请执行此命令
$ php www/index.php webloop:ws-server:start
您可以通过在终端中按 ctrl+C
来停止正在运行的服务器
用法
定义控制器
此包提供了 Controller 接口,因此您可以将您的应用程序分解成逻辑块。您可以将控制器看作是 Nette 中的 Presenters。
要注册新的控制器,您可以简单地扩展包的 Controller 类
<?php use Webloopio\NetteWebsockets\Controller\Controller; class ChatController extends Controller { }
然后,您必须在配置中注册您的新控制器
services: authController: class: ChatController tags: [webloopio.nettews.controller] # OR netteWebsockets: controllers: - ChatController
控制器方法
我们提供了两种您可以使用的方法
动作
<?php use Webloopio\NetteWebsockets\Controller\Controller; use Webloopio\NetteWebsockets\Client\Client; use Webloopio\NetteWebsockets\Server\Message; class ChatController extends Controller { public function actionSend( Client $client, Message $message ) { $chatMessage = $message->getMessage(); // Hello! $userId = $client->getUserId(); // some logic? $this->chatService->saveMessage( $userId, $chatMessage ); // send raw WS message directly to user $client->send( "Hi" ); // or $this->sendMessage( $client, "Hi again" ); } }
循环
<?php use Webloopio\NetteWebsockets\Controller\Controller; use Webloopio\NetteWebsockets\Client\Client; use Webloopio\NetteWebsockets\Client\ClientCollection; use Webloopio\NetteWebsockets\Server\Message; class ChatController extends Controller { public function loopDispatch( ClientCollection $clients ) { // we can fetch new messages from db $messages = $this->chatService->getNewMessages(); if( !$messages ) { return; } // dispatch new messages to all users that are online foreach( $clients->getClients() as $client ) { $this->sendMessage( $client, $messages->getJson() ); } } }
命令
启动服务器
$ php www/index.php webloop:ws-server:start