日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

出块过程(2)nodeos 服务器接收消息

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 出块过程(2)nodeos 服务器接收消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 步驟

在nodeos的main函數中啟動http_plugin插件,注冊處理http請求的回調函數(handle_http_request),然后監聽socket通信端口,等待建立客戶端遠程連接。

step1. 通過http_plugin插件接收客戶端發過來的http請求報文
step2. 解析請求的URL地址和數據信息
step3. 調用對應的回調函數處理,并將結果返回給cleos客戶端。

void http_plugin::plugin_startup() {// 注冊http請求處理函數my->create_server_for_endpoint(*my->https_listen_endpoint, my->https_server);// 監聽socket通信端口my->https_server.listen(*my->https_listen_endpoint);// 等待建立客戶端遠程連接my->https_server.start_accept(); }void create_server_for_endpoint{ws.set_http_handler([&](connection_hdl hdl) {handle_http_request<T>(ws.get_con_from_hdl(hdl));}); }

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 服务器接收消息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。