1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/imiphp-imi-hprose

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 03:36 94f354e

Введение

В рамках imi-фреймворка происходит интеграция разработки Hprose-сервисов. В настоящее время поддерживается взаимодействие по протоколам TCP и Unix Socket.

Планируется реализация следующих функций:

  • middleware (промежуточное ПО);
  • фильтры;
  • HTTP-протокол;
  • WebSocket-протокол и др.

Composer

Данный проект можно установить с помощью composer. Используется автоматическое правило загрузки psr-4. Для этого в файле composer.json необходимо добавить следующий код:

{
    "require": {
        "imiphp/imi-hprose": "^1.2"
    }
}

Затем выполняется команда composer update для установки.

Серверная часть

В файле config/config.php проекта производится настройка:

[
    'components'    =>  [
        // 引入RPC组件以及本组件
        'Rpc'    	=>  'Imi\Rpc',
        'Hprose'    =>  'Imi\Hprose',
    ],
]

Если используется главный сервер:

[
    // 主服务器配置
	'mainServer'	=>	[
		'namespace'	=>	'XXX\MainServer', // 你的命名空间
		'type'		=>	'Hprose', // 必须设为 Hprose
		'port'		=>	8080,
	],
]

Если применяется подчинённый сервер:

[
    // 子服务器(端口监听)配置
	'subServers'		=>	[
		// 子服务器名
		'XXX'	=>	[
			'namespace'	=>	'XXX\Hprose', // 你的命名空间
			'type'		=>	'Hprose', // 必须设为 Hprose
			'port'		=>	50001,
		]
	],
]

Контроллер базового класса

Imi\Rpc\Controller\RpcController.

Контроллер аннотаций

\Imi\Rpc\Route\Annotation\RpcController.

Использование:

@RpcController

Без префикса:

@RpcController('a_b_')

Действие аннотации

\Imi\Rpc\Route\Annotation\RpcAction.

Не имеет параметров.

Маршрутная аннотация

\Imi\Hprose\Route\Annotation\HproseRoute.

Параметры:

  • name — правило наименования маршрута. Обычно это имя метода, если задана псевдоним, то в итоге будет использоваться псевдоним + имя метода;
  • mode — указывает тип возвращаемого результата данной сервисной функции. Обратитесь к документации Hprose для получения подробной информации;
  • simple — указывает, является ли результат данной сервисной функции простым. Значение по умолчанию — false;
  • oneway — указывает, требуется ли ждать возврата значения данной сервисной функцией. Если значение равно true, вызов будет запущен асинхронно и немедленно вернёт null клиенту. Значение по умолчанию — false;
  • async — указывает, является ли данная сервисная функция асинхронной. Асинхронная функция имеет последний параметр как функцию обратного вызова, и пользователь должен вызвать эту функцию обратного вызова в асинхронной функции, чтобы передать возвращаемое значение;
  • passContext — атрибут логического типа, значение по умолчанию — false. Обратитесь к документации Hprose для получения дополнительной информации.

Документация Hprose: https://github.com/hprose/hprose-php/wiki/06-Hprose-%E5%AE%A2%E6%9C%8D%E5%99%A8#addfunction-%E6%B3%95

Клиентская часть

Конфигурация пула соединений

[
	'pools'	=>	[
		'Соединение пула'	=>	[
			'sync'	=>	[
				'pool'	=>	[
					'class'		=>	\Imi\Rpc\Client\Pool\RpcClientSyncPool::class,
					'config'	=>	[
						// Конфигурация общего пула, см. документацию
					],
				],
				'resource'	=>	[
					'clientClass'	=>	\Imi\Hprose\Client\HproseSocketClient::class,
					'uris'	=>	'tcp://127.0.0.1:50001', // Адрес подключения
					// Другая конфигурация
				]
			],
			'async'	=>	[
				'pool'	=>	[
					'class'		=>	\Imi\Rpc\Client\Pool\RpcClientCoroutinePool::class,
					'config'	=>	[
						// Конфигурация общего пула, см. документацию
					],
				],
				'resource'	=>	[
					'clientClass'	=>	\Imi\Hprose\Client\HproseSocketClient::class,
					'uris'	=>	'tcp://127.0.0.1:50001', // Адрес подключения
					// Другая конфигурация
				]
			],
		],
	],
	'rpc'	=>	[
		'defaultPool'	=>	'Имя пула соединения', // Имя пула по умолчанию
	],
]

Вызов клиента

Код вызова:

\Imi\Rpc\Client\Pool\RpcClientPool::getService('Имя службы')->имя метода(параметр);

Вызов аннотации:

class Test
{
	/**
	 * @RpcClient()
	 *
	 * @var \Imi\Rpc\Client\IRpcClient
	 */
	protected $rpcClient;

	/**
	 * @RpcService(serviceName="Имя службы")
	 *
	 * @var \Imi\Rpc\Client\IService
	 */
	protected $xxxRpc;

	public function aaa()
	{
		// Метод один
		$this->rpcClient->getService('Служба')->имя метода(параметр);

		// Способ два
		$this->xxxRpc->имя метода(параметр);
	}
}

Бесплатная техническая поддержка

QQ группа: 17916227 ![Нажмите, чтобы присоединиться](https://pub.idqqimg.com/wpa/images/group.png «Нажмите, чтобы присоединиться»), если у вас есть вопросы, вам помогут ответить и решить их.

Среда выполнения

  • PHP >= 7.1
  • Composer
  • Swoole >= 4.1.0

Авторские права

imi-hprose следует лицензии MIT и предоставляется бесплатно для использования.

Пожертвования

Открытый исходный код не предназначен для получения прибыли, сколько бы то ни было — это выражение признательности, жизнь непроста, так что всё зависит от случая…

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/imiphp-imi-hprose.git
git@api.gitlife.ru:oschina-mirror/imiphp-imi-hprose.git
oschina-mirror
imiphp-imi-hprose
imiphp-imi-hprose
master