golang p2p网

Python015

golang p2p网,第1张

继续进入下一个初始化

n.netService, err = nebnet.NewNebService(n)

if err != nil {

logging.CLog().WithFields(logrus.Fields{

"err": err,

}).Fatal("Failed to setup net service.")

}

netservice有两个成员

type NebServicestruct {

node      *Node

dispatcher *Dispatcher

}

跳出stup()函数

先进入start()函数看一看

if err := n.netService.Start()err != nil {

logging.CLog().WithFields(logrus.Fields{

"err": err,

}).Fatal("Failed to start net service.")

}

进入netservice.start()

func (ns *NebService) Start() error {

logging.CLog().Info("Starting NebService...")

// start dispatcher.

  ns.dispatcher.Start()

// start node.

  if err := ns.node.Start()err != nil {

ns.dispatcher.Stop()

logging.CLog().WithFields(logrus.Fields{

"err": err,

}).Error("Failed to start NebService.")

return err

}

logging.CLog().Info("Started NebService.")

return nil

}

可以看到第一个start()的函数是dispatcher.start()

进入dispatch.start()

func (dp *Dispatcher) Start() {

logging.CLog().Info("Starting NebService Dispatcher...")

go dp.loop()

}

然后就出现一个新的线程、goruntime

go dp.loop()

进入该线程,看它干了些什么

timerChan := time.NewTicker(time.Second).C

for {

select {

case <-timerChan:

metricsDispatcherCached.Update(int64(len(dp.receivedMessageCh)))

case <-dp.quitCh:

logging.CLog().Info("Stoped NebService Dispatcher.")

return

  case msg := <-dp.receivedMessageCh:

msgType := msg.MessageType()

v, _ := dp.subscribersMap.Load(msgType)

if v == nil {

continue

      }

m, _ := v.(*sync.Map)

m.Range(func(key, valueinterface{}) bool {

select {

case key.(*Subscriber).msgChan <- msg:

default:

logging.VLog().WithFields(logrus.Fields{

"msgType": msgType,

}).Warn("timeout to dispatch message.")

}

return true

      })

}

}

一个有点长的循环

metricsDispatcherCached.Update(int64(len(dp.receivedMessageCh)))一秒钟刷新一次缓冲区

case msg := <-dp.receivedMessageCh:

msgType := msg.MessageType()如果能取出dp.receivedMessageCh

msgType := msg.MessageType()首先判断取出的信息类型

v, _ := dp.subscribersMap.Load(msgType)

if v == nil {

continue

}

根据类型取出相应的map

如果取不出,那么使用continue结束这个case

m, _ := v.(*sync.Map)

断言

m.Range(func(key, valueinterface{}) bool {

select {

case key.(*Subscriber).msgChan <- msg:

default:

logging.VLog().WithFields(logrus.Fields{

"msgType": msgType,

}).Warn("timeout to dispa+tch message.")

}

return true

})

将msg推入其他管道里面去。其他goruntime会循环等待该

建立一个P2P平台需要哪些流程

基本流程如下:

1、公司注册(无线下基础的初创业者)

开一家普通公司的手续目前并不严格,截止到2015年9月,P2P监管细则暂未出台,因此,即使是注册一家属于互联网金融性质的企业,跟普通公司注册仍然没有太大区别。大部分只要根据《公司登记管理条例》在当地工商管理部门进行注册,根据《互联网信息服务管理办法》和《互联网站管理工作细则》的规定,在当地工信管理部门进行备案即可。

2、网站注册

网站域名注册,如:WWW(和谐)JZHI(和谐)COM(和谐)CN

3、购买服务器或者租用

建立网站后,便需要购买例如阿里云的云服务器,好比你买了一些心仪的家具,现在需要一个家来安置,有了这个家,便可以更好的展示你的家具。

4、域名备案

根据国家相关规定,所有的网站上线,都需要献给域名进行备案,说明域名属于谁,是谁在运营等等,相关部门便会免费给予备案,时间大约在半个月左右。

5、网站建设

有资本和技术支持的公司,可以选择自行研发一套网贷系统,或者选择一家优质的P2P/P2C网贷系统定制公司,如 迪蒙 极致科技这些知名的金融系统开发商。

6、团队组建

还没有线下基础的除了网贷平台必须具备的各部门核心招募,技术、产品、运营、推广、客服、财务、风控等外,还有一般公司需要做的工作:办公场地、人员培训;了解行业、了解系统、定制运营方案、宣传方案等等这类的工作。