GO2P - 简单易用但完全可配置的p2p框架

网友投稿 1055 2022-10-28

GO2P - 简单易用但完全可配置的p2p框架

GO2P - 简单易用但完全可配置的p2p框架

go2p

golang p2p framework

By v-braun - viktor-braun.de.

Description

GO2P is a P2P framework, designed with flexibility and simplicity in mind. You can use a pre configured stack (encryption, compression, etc.) or built your own based on the existing modules.

GO2P use the middleware pattern as a core pattern for messages. If you have used expressJS, OWIN or other HTTP/Web based frameworks you should be familiar with that. The basic idea is that an outgoing message is passed through multiple middleware functions. Each of this functions can manipulate the message. A middleware function could encrypt, compress, log or sign the message. Outgoing messages will be processed through the middleware functions and incomming messages in the inverted order:

Installation

go get github.com/v-braun/go2p

Usage

You like code? Checkout the chat example

The simplest way to use this framework is to create a new instance of the full configured TCP based network stack:

localAddr := "localhost:7077" net := go2p.NewNetworkConnectionTCP(*localAddr, &map[string]func(peer *go2p.Peer, msg *go2p.Message){ "msg": func(peer *go2p.Peer, msg *go2p.Message) { fmt.Printf("%s > %s\n", peer.RemoteAddress(), msg.PayloadGetString()) }, }) net.OnPeer(func(p *go2p.Peer) { fmt.Printf("new peer: %s\n", p.RemoteAddress()) }) err := net.Start() if err != nil { panic(err) } defer net.Stop() // connects to another peer via tcp net.ConnectTo("tcp", "localhost:7077") // send a message to the 'msg' route net.SendBroadcast(go2p.NewMessageRoutedFromString("msg", "hello go2p"))

Advanced Usage

The function NewNetworkConnectionTCP is a shorthand for the advanced configuration of a network stack.

op := go2p.NewTCPOperator("tcp", localAddr) // creates a tcp based operator (net.Dialer and net.Listener) peerStore := go2p.NewDefaultPeerStore(10) // creates a simple peer store that limits connections to 10 conn := go2p.NewNetworkConnection(). // creates a new instance of the builder WithOperator(op). // adds the operator to the network stack WithPeerStore(peerStore). // adds the peer store to the network stack WithMiddleware(go2p.Routes(routes)). // adds the routes middleware WithMiddleware(go2p.Headers()). // adds the headers middleware WithMiddleware(go2p.Crypt()). // adds encryption WithMiddleware(go2p.Log()). // adds logging Build() // creates the network

This code creates a new NetworkConnection that use tcp communication, a default PeerStore and some middlewares. Outgoing messages will now pass the following middlewares:

(app logic) -> Routing -> Headers -> Crypt -> Log -> (network)

Incomming messages will pass the following middlewares

(app logic) <- Routing <- Headers <- Crypt <- Log <- (network)

Authors

Contributing

Make sure to read these guides before getting started:

Contribution GuidelinesCode of Conduct

License

go2p is available under the MIT License. See LICENSE for details.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Totoval 是一个开箱即用的工匠 API Web框架
下一篇:注解的那些事儿(三)| 注解的使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~