Jgroup学习总结

http://www.cnblogs.com/Ewin/archive/2008/11/25/1340752.html


2. Jgroup学习总结

http://blog.sina.com.cn/s/blog_4fe227ba0100jsx5.html


一个小例子:

 

1.分为客户端和  服务器端! ,先启动服务器端 ,他会启动一个udp(阻塞),绑定在本地的一个随机端口上,并且绑定一个集群

 

2.在启动客户端发送一个消息,客户端和服务器端都会跟新 集群里面的成员,并且服务器端 收到了集群成员发发送的消息,

 

 

3.客户端发送完消息,自动退出,我们可以看到服务器端 有集群成员退出的日志。

 

4. 可以在启动一个服务器端 只要加入到相同的集群中,我们可以在其他的 服务器端的日志中看到 有新的成员加入,并且客户端发送消息到集群上,所有的成员都成收到!!

 

 

服务器端:

 

Java代码   收藏代码
  1. package com.platform.test;  
  2.   
  3. import org.jgroups.JChannel;  
  4. import org.jgroups.Message;  
  5. import org.jgroups.ReceiverAdapter;  
  6. import org.jgroups.View;  
  7. /** 
  8.  * 接收收据包 
  9.  * 
  10.  */  
  11. public class Receive extends ReceiverAdapter  
  12. {  
  13.     JChannel channel;  
  14.     String user_name = System.getProperty("user.name""n/a");  
  15.       
  16.     public static void main(String[] args) throws Exception  
  17.     {  
  18.         //接收收据端  
  19.         new Receive().start();  
  20.     }  
  21.       
  22.     private void start() throws Exception  
  23.     {  
  24.         //创建一个通道  
  25.         channel = new JChannel();  
  26.         //创建一个接收器  
  27.         channel.setReceiver(this);  
  28.         //加入一个群  
  29.         channel.connect("ChatCluster");  
  30.     }  
  31.   
  32.     //覆盖父类的方法  
  33.     @Override  
  34.     public void receive(Message msg)  
  35.     {  
  36.         //具体参见msg的参数  
  37.         String receiveData=(String)msg.getObject();  
  38.         System.out.println("  发过来的数据是:  " +receiveData);  
  39.     }  
  40.   
  41.     @Override  
  42.     public void viewAccepted(View new_view)  
  43.     {  
  44.         System.out.println("** view: " + new_view);  
  45.     }  
  46. }  

 

 

客户端:

 

Java代码   收藏代码
  1. package com.platform.test;  
  2. import org.jgroups.ChannelClosedException;  
  3. import org.jgroups.ChannelNotConnectedException;  
  4. import org.jgroups.JChannel;  
  5. import org.jgroups.Message;  
  6. /** 
  7.  * 发送数据客户端 
  8.  * 
  9.  */  
  10. public class Send   
  11. {  
  12.     JChannel channel;  
  13.     //得到本机电脑的 用户名字  
  14.     String user_name=System.getProperty("user.name""n/a");  
  15.     private void start() throws Exception   
  16.     {  
  17.         /** 
  18.          * 参数里指定Channel使用的协议栈,如果是空的,则使用默认的协议栈, 
  19.          * 位于JGroups包里的udp.xml。参数可以是一个以冒号分隔的字符串, 
  20.          * 或是一个XML文件,在XML文件里定义协议栈。  
  21.          */  
  22.         //创建一个通道  
  23.         channel=new JChannel();          
  24.         //加入一个群  
  25.         channel.connect("ChatCluster");  
  26.         //发送事件  
  27.         sendEvent();  
  28.         //关闭通道  
  29.         channel.close();  
  30.     }  
  31.   
  32.     /** 
  33.      * 主要发送事件 
  34.      */  
  35.     private void sendEvent()   
  36.     {  
  37.         try  
  38.         {  
  39.             String str="2222";//发送的字符串  
  40.             //这里的Message的第一个参数是发送端地址  
  41.             //第二个是接收端地址  
  42.             //第三个是发送的字符串  
  43.             //具体参见jgroup send API  
  44.             Message msg=new Message(nullnull, str);   
  45.             //发送  
  46.             channel.send(msg);  
  47.         } catch (ChannelNotConnectedException e)  
  48.         {  
  49.             e.printStackTrace();  
  50.         } catch (ChannelClosedException e)  
  51.         {             
  52.             e.printStackTrace();  
  53.         }  
  54.     }  
  55.     public static void main(String[] args) throws Exception   
  56.     {  
  57.         //开始发送事件  
  58.         new Send().start();  
  59.     }  
  60. }  

 

 

如果这个例子过于简单 我们可以去 下载 group的源码,实验 源码包里的例子

 

下载地址:

https://github.com/belaban/JGroups

 

官方demo javacode 包名:

 

org.jgroups.demos

 

我们可以实验 下一个 swing 的小例子 ,在两个swing 窗体中同步 内容

 

运行draw.java 两次,会出现两个 swing 窗体,在其中的一个 按住鼠标左键不放 画图 ,数据会同步到另外一个窗体中,这效果也是运用的jgroup的 组播特性!

 

 

 

Jgroup学习总结_第1张图片

 

 

 

还有好多的小例子,我们可以看看 官方的代码是如何写的,把他们运用到 自己的 需求中去!

 

你可能感兴趣的:(group)