Java 使用TCP/IP和Akka流创建p2p网络

Java 使用TCP/IP和Akka流创建p2p网络,java,scala,sockets,tcp,stream,Java,Scala,Sockets,Tcp,Stream,我目前正在用Akka Streams 1.0在Scala中对p2p应用程序的网络层进行编程 我有一个Tcp服务器绑定,作为一个类实现。每个实例化(绑定到一个IP:port)都会产生一个“IncomingConnection”流。 我还有一个Tcp客户机对象,它生成一个“OutgoingConnection”流,作为给定新地址(目标)的结果。 对于这两种情况,Framing.simpleFramingProtocol中的BidiFlow都加入到流中,因此我可以处理消息 这些RunnableFlow

我目前正在用Akka Streams 1.0在Scala中对p2p应用程序的网络层进行编程

我有一个Tcp服务器绑定,作为一个类实现。每个实例化(绑定到一个IP:port)都会产生一个“IncomingConnection”流。 我还有一个Tcp客户机对象,它生成一个“OutgoingConnection”流,作为给定新地址(目标)的结果。 对于这两种情况,Framing.simpleFramingProtocol中的BidiFlow都加入到流中,因此我可以处理消息

这些RunnableFlows中的每一个都是一个“MyAppConnection”,因此无论帧是出帧还是入帧,我都能够发送/接收帧

我能够通过此构造发送和接收。但是现在我想 动态选择我的目的地(从每个节点中),如果没有打开的连接,请让它打开一个新的连接。在背压保持不变的情况下,我如何实现这一点

我的想法是创建一个可变映射,在该映射中添加新连接,删除死连接。但是,难道没有一个不那么混乱的模式吗?此外,我不知道如何用这种方法保持流的背压

flexitroute是不可能的,因为一旦流变得可运行,它就不可变了。因此,我需要事先知道我与多少同龄人交谈。在任何时刻都可能发生变化

这里有一幅小画:

---------------- ----------- ------- ~>| | |~>| |~>| |~> (out) | | Connection | | Framing | | MSG | <~| | |<~| |<~| |<~ (in) ---------------- ----------- ------- MyAppConnection ---------------- ----------- ------- ~>| | | ~>| | ~>| | ~>(外出) ||连接| |框架| | MSG|