thenlabs / websocket-server
1.0.x-dev
2022-03-26 11:42 UTC
Requires
- thenlabs/http-server: ^1.0
- thenlabs/socket-server: ^1.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- php-webdriver/webdriver: ^1.8
- symfony/process: ^5.3
- thenlabs/pyramidal-tests: 2.0.x-dev
This package is auto-updated.
Last update: 2024-09-26 16:53:27 UTC
README
一个使用PHP编写的异步WebSocket服务器。
如果喜欢这个项目,请给我们一个⭐。
安装
$ composer require thenlabs/websocket-server 1.0.x-dev
该项目还没有稳定的版本。
用法
在example目录中存在一个示例项目,该项目实现了一个裸聊服务器。
example/MyChatServer.php文件包含一个类,通过事件系统实现了服务器逻辑,如下所示。
<?php // example/MyChatServer.php use ThenLabs\WebSocketServer\Event\CloseEvent; use ThenLabs\WebSocketServer\Event\MessageEvent; use ThenLabs\WebSocketServer\Event\OpenEvent; use ThenLabs\WebSocketServer\WebSocketServer; class MyChatServer extends WebSocketServer { protected $users = []; public function onOpen(OpenEvent $event): void { $request = $event->getRequest(); $nickname = explode('/', $request->getRequestUri())[1]; // notify to the connected users previously. foreach ($this->users as $user) { $user->send("User '{$nickname}' has connected."); } // add the new user to the list. $this->users[$nickname] = $event->getConnection(); } public function onMessage(MessageEvent $event): void { $senderUser = $event->getConnection(); $senderNick = array_search($senderUser, $this->users); $message = $event->getMessage(); // send the message to the other users. foreach ($this->users as $user) { if ($user !== $senderUser) { $user->send("{$senderNick}: {$message}"); } } } public function onClose(CloseEvent $event): void { $user = $event->getConnection(); $nickname = array_search($user, $this->users); // notify to the other users. foreach ($this->users as $otherUser) { if ($otherUser !== $user) { $otherUser->send("The user {$nickname} has disconnected."); } } unset($this->users[$nickname]); } }
example/start-server.php文件包含启动服务器的脚本。
<?php // example/start-server.php require_once __DIR__.'/../vendor/autoload.php'; require_once __DIR__.'/MyChatServer.php'; $config = [ 'host' => $argv[1] ?? '127.0.0.1', 'port' => $argv[2] ?? 9090, ]; $server = new MyChatServer($config); $server->start();
应该按照以下步骤执行此文件:
$ php example/start-server.php
为了测试示例,我们可以使用example/index.html文件,该文件包含三个客户端,可以使用如下所示:
开发
运行测试
启动selenium服务器。
$ java -jar path/to/selenium-server-standalone-x.y.z.jar
$ ./vendor/bin/pyramidal
