evpp

区块链开发与区块链应用开发

给你一囗甜甜゛ 提交于 2021-02-11 13:23:44
比特币区块链是用C++开发的没错,以太坊和超级账本使用Go开发的。但是以太坊区块链应用开发用的js(web3.js api方便调用),因为我们只是在公链或联盟链上开发Dapp,所以根本只需要会编写智能合约Solidity语言和能够方便调用web3.js api的JavaScrip语言,即可开发以太坊区块链应用。因为比特币区块链网络是写死的,不需要你开发,以太坊网络,超级账本网络也是,所以区块链开发本质上应该指创造区块链的开发,而直接运用现有链开发应用的应该叫做区块链应用开发,这类开发主要以Js为主,项目模板Truffle Boxs大多Js开发。以上Right? 不全对。有区块链开发,也有基于区块链的应用开发。对于区块链开发,用C++或Go开发;而对于区块链应用开发,通常来说是基于以太坊区块链应用开发,那么可以使用任何能发起http请求的语言开发,因为有请求区块链节点的以太坊rpc,调用rpc是通过http post请求进行的,而web3.js是在rpc的基础上封装起来的,因此如果要开发以太坊区块链应用,最快开发效率的应该是Go,因为Go是为Web后台开发而生,C++虽然也能,但是对于Web开发显得乏力,最好使用三方网络库配合,例如360的evpp框架。以上。 自问自答: https://www.oschina.net/question/3649283_2303218 来源:

evpp网络库代码分析(一)

旧巷老猫 提交于 2020-08-18 07:15:05
evpp是奇虎360内部使用的开源多线程网络库,集tcp/udp/http多种协议的服务器和客户端支持。 github 代码路径是: https://github.com/Qihoo360/evpp ,可以不依赖boost库,使用现代c++14语言(evpp/invoke_timer.cc的lambda表达式使用到了c++14的特性)进行编码。本项目高度参考了muduo网络库,而底层使用现成的libevent库作为事件驱动库,典型的一个reactor网络编程模式的例子,本文就是通过分析evpp源码来达到学习c++网络编程的效果。 muduo代码我也拜读过,muduo有个特点,它完全是为linux而写的(譬如里面用到了eventfd,timerfd以及epoll等,都是linux系统特有的,而且还跟linux版本有关,系统版本太低也不支持,譬如eventfd),而evpp做了一定的平台兼容性,能一定程度做到支持windows平台,得益于libevent库。另外,木铎有个base库,是重复造轮子了,其他还好,也是一个不可多得的多线程网络服务器编程demo,值得参考,而evpp没有像muduo那样重新实现一套基础库(如线程库、互斥锁、条件变量等),而是利用了c++14自带的std::thread、std::mutex等,相对通用很多,而且学习这些类库使用在其他项目也能用得着,毕竟是c+

evpp网络库代码分析(二)

江枫思渺然 提交于 2020-08-11 21:04:11
开局一张图! 上图是盗用自《Linux多线程服务端编程,使用muduo C++网络库》一书6.6.2章节(以及下面的时序图也是盗用该书的图)。该图列举出大部分常用的网络编程模型,当然了,这里并没有列出Boost.Asio的proactor模式。其中表中的“互通”是指多个客户端(连接)间是否能方便地交换数据,如chat聊天程序。我们的evpp库实际上是用到了“方案9”,方案9的时序图如下: 可以看出,每一个线程有一个EventLoop处理事件。这种方案是典型的“one loop per thread”流程,有一个“主EventLoop”负责accept连接,然后把连接通过round-robin(轮询调度)挂到底下的多个“子EventLoop”中(EventLoopThreadPool),每个连接都是由一个“子EventLoop”完成的,能保证请求的顺序性,也可以充分利用CPU,防止出现一个reactor的处理能力饱和,而且EventLoop线程池线程数量固定,不会因为连接数过多到达临界点(线程太多导致操作系统线程调度不过来)而性能下降! 另外还有一种网络编程模型比较常用,就是“方案8”,这个模型在muduo中有现成方案,而在evpp中需要自己实现,时序图如下: 这种方案,只有一个EventLoop,但它把计算密集的部分(decode、compute、encode