cmd包下的p2psim子包的分析, p2psim is a command line client for the HTTP API
首先我们启动对应的main函数,对应的启动参数是--help,来查看该包下所有命令的使用,结果如下:
NAME:___go_build_main_go__1_ - devp2p simulation command-line clientUSAGE:___go_build_main_go__1_ [global options] command [command options] [arguments...]VERSION:0.0.0COMMANDS:show show network informationevents stream network eventssnapshot create a network snapshot to stdoutload load a network snapshot from stdinnode manage simulation nodeshelp, h Shows a list of commands or help for one commandGLOBAL OPTIONS:--api value simulation API URL (default: "http://localhost:8888") [$P2PSIM_API_URL]--help, -h show help--version, -v print the version
该子包提供如何下的命令:
p2psim showp2psim events [--current] [--filter=FILTER]p2psim snapshotp2psim loadp2psim node create [--name=NAME] [--services=SERVICES] [--key=KEY]p2psim node listp2psim node show <node>p2psim node start <node>p2psim node stop <node>p2psim node connect <node> <peer>p2psim node disconnect <node> <peer>p2psim node rpc <node> <method> [<args>] [--subscribe]
要正常使用该子包下的命令,我们需要运行/p2p/simulations/examples/ping-pong.go的主函数来启动一个包含运行简单的节点的仿真网络.
正常启动后,你将看到:
INFO [01-23|11:17:10] using sim adapterINFO [01-23|11:17:10] starting simulation server on 0.0.0.0:8888...
该服务启动后,提供如下的API,其作用等同于上面的命令,命令调用的实现其实就是调用API,访问的路径前缀就是0.0.0.0:8888:
GET / Get network informationPOST /start Start all nodes in the networkPOST /stop Stop all nodes in the networkGET /events Stream network eventsGET /snapshot Take a network snapshotPOST /snapshot Load a network snapshotPOST /nodes Create a nodeGET /nodes Get all nodes in the networkGET /nodes/:nodeid Get node informationPOST /nodes/:nodeid/start Start a nodePOST /nodes/:nodeid/stop Stop a nodePOST /nodes/:nodeid/conn/:peerid Connect two nodesDELETE /nodes/:nodeid/conn/:peerid Disconnect two nodesGET /nodes/:nodeid/rpc Make RPC requests to a node via WebSocket
此处不深究API,仿真网络的服务已经起来了,下面开始p2psim包下命令的使用:
/p2psim
show
function:显示当前仿真网络的状态args:""demo: shownotice:success_result_demo:NODES 0CONNS 0
snapshot ``` function:导出当前仿真网络的节点信息 args:”” demo: shapshot notice: success_result_demo: {“nodes”:[{“node”:{“config”:{“id”:”085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d”,”private_key”:”3480d230f453e7c207bbd3b770bf774dc8a17e599394f9283147a35c3ead561c”,”name”:”node1”,”services”:[“ping-pong”]},”up”:true}},{“node”:{“config”:{“id”:”cedbaecccfe42d04b742d1be6e924e0654a7eb1aa584d497f98d24951b156ada84bcfc6455ff37ba1fc81179d0a7c3da1ba34945be19d1fe5cd4c8a32a659a7b”,”private_key”:”b7592cdeee6195c4486fcdd8007e1aedfd3a49e6c9f53e0845bf977d4ad043cc”,”name”:”node2”,”services”:[“ping-pong”]},”up”:false}}],”conns”:[{“one”:”cedbaecccfe42d04b742d1be6e924e0654a7eb1aa584d497f98d24951b156ada84bcfc6455ff37ba1fc81179d0a7c3da1ba34945be19d1fe5cd4c8a32a659a7b”,”other”:”085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d”,”up”:false}]}
* node> * create
function:创建一个节点args:[--name=NAME] [--services=SERVICES] [--key=KEY]demo: node create --name node1notice:success_result_demo:Created node1
> * list
function:列出当前仿真网络的节点信息args:""demo: node listnotice:success_result_demo:NAME PROTOCOLS IDnode1 085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871dnode2 cedbaecccfe42d04b742d1be6e924e0654a7eb1aa584d497f98d24951b156ada84bcfc6455ff37ba1fc81179d0a7c3da1ba34945be19d1fe5cd4c8a32a659a7b
> * show
function:查看仿真网络中某个节点的具体信息args:<node>demo: node show node1notice:success_result_demo:NAME node1PROTOCOLSID 085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871dENODE enode://085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d@127.0.0.1:30303
> * start
function:启动一个节点args:<node>demo: node start node1notice:success_result_demo:Started node1
> * connect
function:将一个节点连接到另外一个节点args:<node> <peer>demo: node connect node2 node1notice:success_result_demo:Connected node2 to node1
> * disconnect
function:节点断开连接args:<node> <peer>demo: node disconnect node2 node1notice:success_result_demo:Disconnected node2 from node1```
- stop
```function:停止一个节点args:<node>demo: node stop node2notice:success_result_demo:Stopped node2```
- rpc
```function:调用rpc接口args:<node> <method> [<args>] [--subscribe]demo: node rpc node1 adminnotice:success_result_demo:// TODO```
