1、使用Jgroups构建集群网技术(P2P)——发现集群中的节点
一、使用Jgroups构建集群网技术(P2P)——发现集群中的节点
通过JGroups可以构建一个P2P集群网,
最初第一步当然是节点的发现,
接下来的文章我说一下p2p共享文件的机制。
通过JGroups可以构建一个P2P集群网,
最初第一步当然是节点的发现,
import java.util.HashMap; import java.util.Map; import org.jgroups.Address; import org.jgroups.ChannelClosedException; import org.jgroups.ChannelException; import org.jgroups.ChannelNotConnectedException; import org.jgroups.JChannel; import org.jgroups.Message; import org.jgroups.ReceiverAdapter; import org.jgroups.View; public class Peer { // key:peer name ,value:src addr public Map<String, Address> peerInCluster = new HashMap<String, Address>(); private JChannel channel; private Receive receive; public Peer(String name) { this.name = name; initChannel(); this.receive = new Receive(channel); searchOtherPeer(); } public void initChannel() { try { if (channel == null) { channel = new JChannel(); channel.connect("ChatCluster"); } } catch (ChannelException e) { e.printStackTrace(); } } public void searchOtherPeer() { try { Message msg = new Message(null, null, "Can you hear me" + "@" + name); // 发送 channel.send(msg); } catch (ChannelException e) { e.printStackTrace(); } } class Receive extends ReceiverAdapter { JChannel channel; public Receive(JChannel channel) { this.channel = channel; channel.setReceiver(this); } // 覆盖父类的方法 @Override public void receive(Message msg) { if (msg.getSrc().toString().startsWith(channel.getName())) { return; } Object msgInfo = null; if ((msgInfo = msg.getObject()) instanceof String) { String info = (String) msgInfo; System.out.println(msg.getDest() + "****" + msg.getSrc() + "*****"); String[] infos = info.split("@"); if (infos[0].equals("Can you hear me")) { Address src = null; // 尚未记录该节点,是一个新起来的节点 if ((src = peerInCluster.get(infos[1])) == null) { peerInCluster.put(infos[1], (src = msg.getSrc())); try { channel.send(new Message(src, null, "Can you hear me" + "@" + name)); } catch (ChannelNotConnectedException e) { e.printStackTrace(); } catch (ChannelClosedException e) { e.printStackTrace(); } } } } } @Override public void viewAccepted(View new_view) { } } // public // peer name private String name; String getName() { return name; } void setName(String name) { this.name = name; } public static void main(String[] args) throws InterruptedException { Peer peer = new Peer("hh" + System.currentTimeMillis()); Peer peer2 = new Peer("boy"); Peer peer3 = new Peer("girl"); Thread.sleep(2000); System.out.println(peer.peerInCluster); System.out.println(peer2.peerInCluster); System.out.println(peer3.peerInCluster); } }
接下来的文章我说一下p2p共享文件的机制。