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

OSCHINA-MIRROR/limingxinleo-thrift-go-phalcon-project

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
run
Loading...
README.md

Структура Phalcon

Общее количество загрузок Последняя стабильная версия Последняя нестабильная версия Лицензия

Официальный сайт Phalcon: https://docs.phalconphp.com/zh/latest/index.html
Wiki: https://github.com/limingxinleo/simple-subcontrollers.phalcon/wiki

Установка

  1. Установите проект:
composer create-project limingxinleo/thrift-go-phalcon-project
  1. После установки расширения Composer скопируйте пакет расширений Go в GOPATH (или создайте символическую ссылку).
ln -s /your/path/to/thrift-go-phalcon-project/vendor/apache/thrift/lib/go/thrift thrift
  1. Скомпилируйте сервис:
    — Go: используйте команду thrift -r --gen go:thrift_import=thrift App.thrift
    — PHP: используйте команду thrift -r --gen php:server,psr4 App.thrift

  2. Установите сервис 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

Go&Swoole RPC сервис

  • Go: файл thrift/gen-go/main.go
# RPC服务注册方法
server.RegisterProcessor("app", service.NewAppProcessor(&impl.App{}));
  • Swoole: файл app/tasks/Thrift/Service.php
$handler = new AppHandler();
$processor->registerProcessor('app', new AppProcessor($handler));

Реализация сервиса

  • Swoole: файл app/thrift/Services/AppHandle.php
<?php 
namespace App\Thrift\Services;

use MicroService\AppIf;

class AppHandler extends Handler implements AppIf
{
    public function version()
    {
        return $this->config->version;
    }

}

Балансировка нагрузки

Nginx Stream балансировщик нагрузки уже очень мощный и имеет встроенный механизм проверки работоспособности.

Обнаружение сервисов

  1. Автор проекта уже встроил функцию регистрации на основе Thrift.
    — Реализована функция регистрации Swoole Service.
    — Реализован сервис регистрации Go.

  2. Или используйте его вместе с реестром:
    файл 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);
}

Типы данных Thrift

  1. Основные типы (в скобках указаны соответствующие типы Java):
    — bool (boolean): логический тип (TRUE или FALSE)
    — byte (byte): 8-битное целое число со знаком
    — i16 (short): 16-битное целое число со знаком
    — i32 (int): 32-битное целое число со знаком
    — i64 (long): 64-битное целое число со знаком
    — double (double): 64-битное число с плавающей запятой
    — string (String): строка, использующая кодировку UTF-8

  2. Специальные типы (в скобках указаны соответствующие типы Java):

binary (ByteBuffer): необработанный поток байтов
  1. Structs (структуры):
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 )

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

Введение

RPC-сервисы на Go и PHP, основанные на Thrift. Развернуть Свернуть
PHP и 5 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/limingxinleo-thrift-go-phalcon-project.git
git@api.gitlife.ru:oschina-mirror/limingxinleo-thrift-go-phalcon-project.git
oschina-mirror
limingxinleo-thrift-go-phalcon-project
limingxinleo-thrift-go-phalcon-project
thrift