SD 框架最新版本 2.2.0 版本带了全新的高度自由的服务器设计体验。 最大的变化是开发者简单的修改配置就可以自由的开启多个端口,并且为每个端口配置不同的协议,并且在框架内部会自动转换协议。 比如说A用户连接到了9091端口,B用户连接到了9092端口,服务器通过广播或者群发消息时会自动将信息封装成端口定义的协议,开发者无需关心。同样AB用户发来的消息也会被服务器自动解除封装路由到控制器中。 use Server\CoreBase\PortManager;
$config['ports'][] = [
'socket_type' => PortManager::SOCK_TCP,
'socket_name' => '0.0.0.0',
'socket_port' => 9091,
'pack_tool' => 'LenJsonPack',
'route_tool' => 'NormalRoute',
];
$config['ports'][] = [
'socket_type' => PortManager::SOCK_TCP,
'socket_name' => '0.0.0.0',
'socket_port' => 9092,
'pack_tool' => 'EofJsonPack',
'route_tool' => 'NormalRoute',
];
$config['ports'][] = [
'socket_type' => PortManager::SOCK_HTTP,
'socket_name' => '0.0.0.0',
'socket_port' => 8081,
'route_tool' => 'NormalRoute'
];
$config['ports'][] = [
'socket_type' => PortManager::SOCK_WS,
'socket_name' => '0.0.0.0',
'socket_port' => 8083,
'route_tool' => 'NormalRoute',
'pack_tool' => 'NonJsonPack',
'opcode' => PortManager::WEBSOCKET_OPCODE_TEXT
];
return $config; 通过ports.php配置文件我们开起了2个tcp端口和1个http端口以及1个websocket。 启动服务器后我们可以看到每个端口的状态,以及赋予端口的协议封装器。 关于协议封装器Pack,新版本也进行了增强,继承IPack接口现在需要实现5个接口 interface IPack
{
function encode($buffer);
function decode($buffer);
function pack($data);
function unPack($data);
function getProbufSet();
} 其中encode和decode是协议头的解析,pack和unpack是协议体的序列化工作,getProbufSet则会返回swoole的协议配置信息。 框架默认提供了4个基本pack和一个protobuf的pack。 DispatchPack:框架内部和Dispatch服务器通讯时使用的内部协议,序列化速度最快,但只支持swoole。 EofJsonPack:使用JSON协议+EOF的封装器 LenJsonPack:使用Len头+JSON协议的封装器 NonJsonPack:JSON协议封装器,没有任何头部,适用于websocket协议。 SD2.2.0版本还提供一个跨进程的高速内存缓存模块 public function http_map_add()
{
$cache = Cache::getCache('TestCache');
$cache->addMap('123');
$this->http_output->end($cache->getAllMap());
} 其中TestCahce是一个Task类 class TestCache extends Task
{
public $map = [];
public function addMap($value)
{
$this->map[] = $value;
return true;
}
public function getAllMap()
{
return $this->map;
}
} 使用起来是不是超级简单? SD2.2.0-beta版本目前只能在git上下载,composer安装的还是2.1.5版本,欢迎大家尝鲜,这将是目前SD框架更新历上最好用的一个版本!(由于配置文件改变过大,旧用户需要手动修改配置模板) |