出块过程(2)nodeos 服务器接收消息
生活随笔
收集整理的這篇文章主要介紹了
出块过程(2)nodeos 服务器接收消息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 步驟
在nodeos的main函數中啟動http_plugin插件,注冊處理http請求的回調函數(handle_http_request),然后監聽socket通信端口,等待建立客戶端遠程連接。
step1. 通過http_plugin插件接收客戶端發過來的http請求報文
step2. 解析請求的URL地址和數據信息
step3. 調用對應的回調函數處理,并將結果返回給cleos客戶端。
1.1 http請求處理函數
從http報文中解析出URL地址(resource)、消息內容(body),然后在url_handlers集合中查找URL對應的回調函數,最后通過handler_itr->second調用處理函數。
void handle_http_request {…auto body = con->get_request_body();auto resource = con->get_uri()->get_resource();auto handler_itr = url_handlers.find(resource);if(handler_itr != url_handlers.end()) {handler_itr->second(resource, body, [con](int code, string body) {con->set_body(body);con->set_status(websocketpp::http::status_code::value(code));});}… }1.2. 注冊URL處理函數
url_handlers是一個URL和處理函數的鍵值對map集合,由class http_plugin_impl管理,其它插件模塊通過add_api函數注冊URL回調函數。
plugins/http_plugin/http_plugin.cpp
class http_plugin_impl {map<string,url_handler> url_handlers; ... }void add_api(const api_description& api) {for (const auto& call : api)add_handler(call.first, call.second); }void http_plugin::add_handler {…my->url_handlers.insert(std::make_pair(url,handler); }eg,chain_api_plugin插件在啟動函數中注冊了以下URL回調函數,包括查詢區塊信息、處理交易數據:
void chain_api_plugin::plugin_startup() {app().get_plugin<http_plugin>().add_api({CHAIN_RO_CALL(get_info, 200),CHAIN_RO_CALL(get_block, 200),…CHAIN_RW_CALL(push_transaction, 202),CHAIN_RW_CALL(push_transactions, 202)}); }總結
以上是生活随笔為你收集整理的出块过程(2)nodeos 服务器接收消息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 出块过程 (1)close发送消息
- 下一篇: 波卡链Substrate (6)Babe