Структура Phalcon
Официальный сайт Phalcon: https://docs.phalconphp.com/zh/latest/index.html
Wiki: https://github.com/limingxinleo/simple-subcontrollers.phalcon/wiki
composer create-project limingxinleo/thrift-go-phalcon-project
ln -s /your/path/to/thrift-go-phalcon-project/vendor/apache/thrift/lib/go/thrift thrift
Скомпилируйте сервис:
— Go: используйте команду thrift -r --gen go:thrift_import=thrift App.thrift
— PHP: используйте команду thrift -r --gen php:server,psr4 App.thrift
Установите сервис Go:
— Загрузите скомпилированный пакет с официального сайта Go, например, go1.8.3.linux-amd64.tar.gz.
— Распакуйте архив: tar -xzf go1.8.3.linux-amd64.tar.gz
— Переместите файл в папку: mv go /usr/local/go/1.8.3
— Отредактируйте файл: vim /etc/profile
— Добавьте строки:
export GOROOT='/usr/local/go/1.8.3' (если папки нет, создайте её)
export GOPATH='/usr/local/go/libs/' (если папки нет, создайте её)
export PATH=$GOROOT/bin:$PATH
— Установите govendor: go get -u github.com/kardianos/govendor
— Перейдите в папку src/github.com/kardianos/govendor/ и выполните команду: go build
— Создайте символическую ссылку: cd /usr/local/bin; ln -s /usr/local/go/libs/src/github.com/kardianos/govendor/govendor govendor
# RPC服务注册方法
server.RegisterProcessor("app", service.NewAppProcessor(&impl.App{}));
$handler = new AppHandler();
$processor->registerProcessor('app', new AppProcessor($handler));
<?php
namespace App\Thrift\Services;
use MicroService\AppIf;
class AppHandler extends Handler implements AppIf
{
public function version()
{
return $this->config->version;
}
}
Nginx Stream балансировщик нагрузки уже очень мощный и имеет встроенный механизм проверки работоспособности.
Автор проекта уже встроил функцию регистрации на основе Thrift.
— Реализована функция регистрации Swoole Service.
— Реализован сервис регистрации Go.
Или используйте его вместе с реестром:
файл app/tasks/Thrift/ServiceTask.php
protected function beforeServerStart(swoole_server $server)
{
parent::beforeServerStart($server); // TODO: Change the autogenerated stub
// 增加服务注册心跳进程
$worker = new swoole_process(function (swoole_process $worker) {
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect(env('REGISTRY_IP'), env('REGISTRY_PORT'), -1)) {
exit("connect failed. Error: {$client->errCode}\n");
}
swoole_timer_tick(5000, function () use ($client) {
$service = env('REGISTRY_SERVICE', 'github');
$data = [
'service' => $service,
'ip' => env('SERVICE_IP'),
'port' => env('SERVICE_PORT'),
'nonce' => time(),
'register' => true,
'sign' => 'xxx',
];
$client->send(json_encode($data));
$result = $client->recv();
$result = json_decode($result, true);
if ($result['success']) {
foreach ($result['services'] as $key => $item) {
Redis::hset($service, $key, json_encode($item));
}
}
});
});
$server->addProcess($worker);
}
Основные типы (в скобках указаны соответствующие типы Java):
— bool (boolean): логический тип (TRUE или FALSE)
— byte (byte): 8-битное целое число со знаком
— i16 (short): 16-битное целое число со знаком
— i32 (int): 32-битное целое число со знаком
— i64 (long): 64-битное целое число со знаком
— double (double): 64-битное число с плавающей запятой
— string (String): строка, использующая кодировку UTF-8
Специальные типы (в скобках указаны соответствующие типы Java):
binary (ByteBuffer): необработанный поток байтов
struct UserProfile {
1: i32 uid,
2: string name,
3: string blurb
}
struct UserProfile {
1: i32 uid = 1,
2:
В этом тексте не удалось найти информацию о языке программирования, который используется в запросе. string name = "User1",
3: string blurb
}
4. Контейнеры. Кроме основных типов данных, Thrift также поддерживает следующие типы контейнеров:
> list (java.util.ArrayList)
> set (java.util.HashSet)
> map (java.util.HashMap)
struct Node {
1: i32 id,
2: string name,
3: list<i32> subNodeList,
4: map<i32,string> subNodeMap,
5: set<i32> subNodeSet
}
struct SubNode {
1: i32 uid,
2: string name,
3: i32 pid
}
struct Node {
1: i32 uid,
2: string name,
3: list<SubNode> subNodes
}
5. Сервис
service UserStorage {
void store(1: UserProfile user),
UserProfile retrieve(1: i32 uid)
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )