fie*_*dju 5 java networking multithreading distance bellman-ford
所以我是Java新手,我做了一些c编程.我正在尝试建立一个虚拟的节点网络,每个节点都需要成为一个线程.仅允许节点与其邻居节点通信.将有一个主节点可以与任何节点通信,但节点必须相互通信才能返回主节点.主节点邻居可以与主节点通信.
我本来打算保留一个节点的数组列表,但后来我意识到所有节点都需要有自己的线程.
我的问题是如何在Java中的线程之间传递信息.我需要能够让主节点给出所有常规节点的位置信息.我需要常规节点才能将消息传递给它们的邻居常规节点.
这是我的git回购,如果你想看看我现在的代码.
https://github.com/fieldju/cs372_project
在CI中制作了一个程序,使用管道让孩子们互相交谈,服务器连接客户端,但是在这个问题上,节点要进行p2p通信,因为大多数人不能直接与主节点/服务器通信
对于任何看过这个并希望看到结果的人来说,这只是一个更新.我已经启动并运行节点并进行通信,您可以查看代码
https://github.com/fieldju/cs372_project
我仍在研究距离矢量和其他一些东西,但到下周末,整个事情应该完成.
我最初打算保留节点的数组列表,但后来我意识到所有节点都需要有自己的线程。
你可以保留一个线程数组,它仍然会维护一个具有相同逻辑结构的每个节点的线程。
如何在 Java 中的线程之间向前传递信息。
如果线程驻留在同一个进程中,那么套接字肯定是一种过度杀伤力。我会使用一个或多个ConcurrentLinkedQueue实例来推送/弹出消息。
一个或几个实际上取决于您正在实施的通信类型。也许每个节点有一个 ConcurrentLinkedQueue,因此节点将消息推送到队列,并且每个节点都知道从哪里弹出消息。
一些实施提示
将路由消息的所有逻辑封装在一个类中 - 我们将这个类称为VirtualNetwork
。VirtualNetwork
处理 ConcurrentLinkedQueue 的所有实例,并向所有线程提供用于发送/接收消息的方法 API。通过在 Thread 构造函数上传递对它的引用,使该类的一个实例VirtualNetwork
可供所有节点访问。
这是你的班级的草图NodeThread
。请注意,类VirtualNetwork
和Message
是您必须自行实现的类。
class NodeThread extends Thread {
private int nodeId;
private VirtualNetwork network;
public NodeThread(int nodeId,VirtualNetwork network) {
this.network = network;
this.nodeId = nodeId;
}
public void run() {
/* when you have to send */
int nodeReceptor = this.nodeId -1; /* neighbor in the array of threads */
Message m = new Message(this.nodeId,nodeReceptor);
m.setContent(10);
network.send(m);
/* when you have to receive */
Message m = network.receive(this.nodeId);
/* it's your decision to implement this in a blocking way or not */
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4579 次 |
最近记录: |