91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的撮合引擎是什么

發布時間:2021-08-30 09:43:48 來源:億速云 閱讀:205 作者:chen 欄目:互聯網科技

這篇文章主要介紹“PHP中的撮合引擎是什么”,在日常操作中,相信很多人在PHP中的撮合引擎是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP中的撮合引擎是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Laravel Package for Matching Engine

Matching Engine For Laravel(基于redis的撮合引擎),PHP高性能撮合引擎

快速開始

  • github地址

  • 安裝: composer require sting_bo/mengine

  • 復制配置文件: php artisan vendor:publish

依賴

  • predis

號外

  • 已經出Golang微服務撮合啦,歡迎使用并提issue

使用說明

  • 已有數據的系統如果使用此庫,可以自己寫一個初始化腳本,先把數據跑入隊列

  • 用戶下單
  • 下單后,先存入數據庫,然后才開始下面步驟,實例化單據對象

use StingBo\Mengine\Core\Order;

$uuid = 3; // 用戶唯一標識
$oid = 4; // 訂單唯一標識
$symbol = 'abc2usdt'; // 交易對
$transaction = 'buy'; // 交易方向,buy/sale
$price = 0.4; // 交易價格,會根據設置精度轉化為整數
$volume = 15; // 交易數量,會根據設置精度轉化為整數

$order = new Order($uuid, $oid, $symbol, $transaction, $volume, $price);

交易方向交易精度可在配置文件靈活設置

return [
    'mengine' => [
        // 交易類型,不可更改
        'transaction' => [
            'buy',
            'sale',
        ],
        // 精度,可更改
        'accuracy' => 8, //default        
        'test2usdt_accuracy' => 4, //設置交易對精度則使用,沒有則取accuracy
    ],
];
  • push到隊列,隊列任務需要手動開啟

use StingBo\Mengine\Services\MengineService;

$ms = new MengineService();
$ms->pushQueue($order);

開啟隊列任務: php artisan queue:work --queue=abc2usdt 也可以使用horizonsupervisor來輔助,事半功倍!

隊列消費時會進入撮合程序,大概的步驟如下:

  1. 獲取匹配委托訂單

  2. 如果沒有匹配的訂單,則進入委托池,觸發委托池變更事件,詳見第5點

  3. 如果有匹配的委托,程序撮合,更新委托池數據

  4. 交易成功會觸發事件,開發者要在監聽器里處理有交易的委托單,比如更新數據庫數據,WebSocket通知等 在EventServiceProvider里為撮合成功的事件注冊監聽器:

// 撮合成功通知,參數分別是:當前訂單,被匹配的單據,交易數量
event(new MatchEvent($order, $match_order, $match_volume));

// 注冊監聽器
protected $listen = [
    'StingBo\Mengine\Events\MatchEvent' => [
        'App\Listeners\YourListener', // 你自己的監聽器,應該也使用異步來實現
    ],
];
  1. 如果只是部分成交,則剩余部分進入委托池,觸發委托池變更事件,K線或者深度列表變更通知等, 注冊監聽器如下:

// 委托池數據變更事件
event(new PushQueueEvent($order));

// 注冊監聽器
protected $listen = [
    'StingBo\Mengine\Events\PushQueueEvent' => [
        'App\Listeners\YourListener', // 你自己的監聽器,應該也使用異步來實現
    ],
];
  • 用戶撤單

撤單流程應該是先查詢數據庫確認是否可撤銷,再從redis里刪除數據成功,最后更新回數據庫

$order = new Order($uuid, $oid, $symbol, $transaction, $volume, $price);
$ms = new MengineService();
$ms->deleteOrder($order);

此撮合引擎沒有實現像數據庫那樣的鎖機制,為了防止有單子在被撮合時又有撤銷的命令出現,所以下單與撤單都走的同一個隊列,保證了順序性,每個交易對是隔離的隊列,效率也有一定的保證,但開發需要實現異步通知用戶功能,注冊監聽器如下:

// 撤單成功通知
event(new DeleteOrderSuccEvent($order));

// 注冊監聽器
protected $listen = [
    'StingBo\Mengine\Events\DeleteOrderSuccEvent' => [
        'App\Listeners\YourListener', // 你自己的監聽器,應該也使用異步來實現
    ],
];
  • 獲取某個交易對買/賣深度列表
$symbol = 'abc2cny';
$transaction = 'buy';
$ms = new MengineService();
$ms->getDepth($symbol, $transaction);

總結

本地垃圾筆記本上測試,交易對撮合速度平均在200筆/s,后續將繼續優化撮合速度

PHP中的撮合引擎是什么

到此,關于“PHP中的撮合引擎是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

平武县| 绥棱县| 武隆县| 威海市| 满洲里市| 三台县| 赣榆县| 喀喇沁旗| 昂仁县| 桃园县| 大庆市| 上犹县| 观塘区| 定西市| 合水县| 景宁| 浮山县| 梨树县| 收藏| 云林县| 中江县| 彰化县| 平原县| 哈尔滨市| 富蕴县| 白玉县| 和林格尔县| 乌拉特中旗| 江华| 孙吴县| 浦北县| 深州市| 禹州市| 和田县| 江山市| 威信县| 桃园县| 固阳县| 象山县| 建宁县| 丹阳市|