Shadowfax可帮助开发者快速搭建WebSocket服务器。
首先,你需要将配置项type
修改为websocket
,这样Shadowfax启动时就会创建一个WebSocket服务器:
type: websocket
你可以使用Artisan命令shadowfax:handler
创建一个Handler来编写WebSocket服务端的逻辑代码:
php artisan shadowfax:handler EchoHandler
上述命令会在app/WebSocket/Handlers/
目录下创建一个名为EchoHandler的类,当然你也可手动创建Handler,
手动创建的Handler必须实现HuangYi\Shadowfax\Contracts\WebSocket\Handler
接口,例如:
<?php
namespace App\WebSocket\Handlers;
use Illuminate\Http\Request;
use HuangYi\Shadowfax\Contracts\WebSocket\Connection;
use HuangYi\Shadowfax\Contracts\WebSocket\Handler;
use HuangYi\Shadowfax\Contracts\WebSocket\Message;
class EchoServer implements Handler
{
/**
* Handler for open event.
*
* @param \HuangYi\Shadowfax\Contracts\WebSocket\Connection $connection
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function onOpen(Connection $connection, Request $request)
{
$connection->send('connected');
}
/**
* Handler for message event.
*
* @param \HuangYi\Shadowfax\Contracts\WebSocket\Connection $connection
* @param \HuangYi\Shadowfax\Contracts\WebSocket\Message $message
* @return mixed
*/
public function onMessage(Connection $connection, Message $message)
{
$connection->send($message->getData());
}
/**
* Handler for close event.
*
* @param \HuangYi\Shadowfax\Contracts\WebSocket\Connection $connection
* @return mixed
*/
public function onClose(Connection $connection)
{
$connection->send('closed');
}
}
这个EchoHandler实现了一个简单的Echo服务器,它会直接返回客户端发送过来的数据。
创建好Handler后,需要使用HuangYi\Shadowfax\Facades\WebSocket
将其绑定到WebSocket路由上面。你可以在routes/
文件夹下面创建一个websocket.php
文件:
<?php
use App\WebSocket\Handlers\EchoServer;
use HuangYi\Shadowfax\Facades\WebSocket;
WebSocket::listen('/echo', new EchoServer);
并在app/Providers/RouteServiceProvide.php
中引入websocket.php
文件:
if (defined('SHADOWFAX_START')) {
require base_path('routes/websocket.php');
}
现在你就可以通过php shadowfax start
命令来启动你的WebSocket服务了。
{primary} WebSocket路由本质上还是一个Http路由,所以也可以使用domain、group、prefix、middleware等特性,不过middleware仅在握手阶段有效。