`
flycomos.lee
  • 浏览: 281938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Openfire 使用RMI远程调用同步好友列表

    博客分类:
  • rmi
阅读更多

1. 定义接口:

 

public interface RmiRemoteIntface extends Remote{
   
    void deleteFriend(String user1, String user2) throws RemoteException;
   
    String addFriend(String user1, String user2) throws RemoteException;
}

 

 

2. 实现接口

 

public class RmiRemoteObj extends UnicastRemoteObject implements
        RmiRemoteIntface {

    protected RmiRemoteObj() throws RemoteException {
        super();
    }

    @Override
    public void deleteFriend(String user1, String user2) throws RemoteException {
//        IQ iq = new IQ();
//        iq.setType(IQ.Type.set);
//        for (ClientSession session : XMPPServer.getInstance().getRoutingTable().getClientsRoutes(true)) {
//            if (session.getAddress().getNode().equals(user1)) {
//                processDeleteMsg(iq, user2, session);
//            } else if (session.getAddress().getNode().equals(user2)) {
//                processDeleteMsg(iq, user1, session);
//            }
//        }
//        Element element = null;
    }
   
    public String addFriend(String user1, String user2) throws RemoteException{
//        IQ iq = new IQ();
//        iq.setType(IQ.Type.set);
//        for (ClientSession session : XMPPServer.getInstance().getRoutingTable().getClientsRoutes(true)) {
//            if (session.getAddress().getNode().equals(user1)) {
//                processAddMsg(iq, user2, session);
//            } else if (session.getAddress().getNode().equals(user2)) {
//                processAddMsg(iq, user1, session);
//            }
       
        System.out.println(user1+ " "+user2);
        return user1+" "+user2+  " hello world " ;
        }

 

 

3. 编写RmiServer

 

public class RmiServer extends Thread{
    public static int rmi = 0;
    public static RmiServer rmiServer;
    static{
        rmiServer = new RmiServer();
        rmiServer.setDaemon(false);
        rmiServer.start();
    }
   
    public static void main(String args[]){
        //创建并安装安全管理器
//        if(System.getSecurityManager() == null){
//            System.setSecurityManager(new RMISecurityManager());
//        }
        try{
            LocateRegistry.createRegistry(8057);
            //创建远程对象
            RmiRemoteIntface rro = new RmiRemoteObj();
            //将实例注册到专有的URL
            Naming.rebind("//127.0.0.1:8057/RmiRemoteObj", rro);
           
            System.out.println("RMI服务器正在运行...");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
   
    public void run(){
        try{
            LocateRegistry.createRegistry(8057);
            //创建远程对象
            RmiRemoteIntface rro = new RmiRemoteObj();
            //将实例注册到专有的URL
            Naming.rebind("//127.0.0.1:8057/RmiRemoteObj", rro);
           
            System.out.println("RMI服务器正在运行...");
        }catch(Exception e){
            e.printStackTrace();
        }
    }

 

 

4. 编写RmiClient

 

public class RmiClient {

    public static void main(String args[]){
        //创建并安装安全管理器
//        if(System.getSecurityManager()==null)
//        {
//           System.setSecurityManager(new RMISecurityManager());
//        }

        String host = "rmi://127.0.0.1:8057/RmiRemoteObj";
//        String host = "rmi://192.168.1.103:2099/RmiRemoteObj";
//        String host = "rmi://192.168.1.119:2099/RmiRemoteObj";
//        if(args.length > 0){
//            host = args[0];
//        }
       
        try{
            //根据制定的URL定位远程对象
            RmiRemoteIntface rri = (RmiRemoteIntface)Naming.lookup(host);
//            rri.addFriend("test01", "test02");
            System.out.println(rri.addFriend("aaaaaaa", "ccc"));
//            rri.deleteFriend("admin", "kocko");
            System.out.println("调用成功!");
        }catch(Exception e){
            e.printStackTrace();
        }

    }

 

5. 在Openfire启动时加载Rmi服务

    在类org.jivesoftware.openfire.spi.ConnectionManagerImpl 的方法   startListeners()startHTTPBindListeners后面加上RmiServer rmi = new RmiServer();

    搞定!

RmiServer rmi = new RmiServer();

分享到:
评论

相关推荐

    openfire好友关系解析

    总结来说,Openfire 中的好友关系管理涉及到 XML 数据包的交换(如 `<presence>` 和 `<iq>`)以及与数据库的交互,通过这些操作来维持好友列表的实时性和准确性。理解和掌握这一过程对于管理和开发基于 Openfire 的...

    openfire使用hazelCast集群

    OpenFire 使用 HazelCast 集群 OpenFire 是一款流行的即时通信服务器软件,而 HazelCast 是一个高性能的分布式内存数据网格。OpenFire 使用 HazelCast 集群可以提高系统的可扩展性和高可用性。本文将从集群概念、两...

    xmpp简介及openfire使用手册

    ### XMPP简介及OpenFire使用手册 #### 一、XMPP概述 **1.1 什么是XMPP** XMPP(Extensible Messaging and Presence Protocol,可扩展消息与存在协议)是目前四大主流即时消息(Instant Messaging, IM)协议之一。...

    openfire添加好友

    在Openfire中,用户可以通过添加好友来建立联系人列表,从而实现消息的发送和接收。下面将详细解释Openfire中添加好友的过程以及涉及到的相关概念。 1. **Presence包与类型**: - `unavailable`: 用户下线或者离线...

    使用openfire登录android

    标题“使用openfire登录android”涉及的技术点主要是集成Openfire服务器和MySQL数据库,以及在Android平台上实现登录功能。Openfire是一款开源的即时通讯(Instant Messaging, IM)服务器,它基于XMPP(Extensible ...

    推送openfire离线好友请求

    openfire添加好友离线请求推送

    openfire深入浅出

    你还将了解到如何设置访问控制列表(ACL),以限制特定用户的权限,以及如何使用OpenFire的内置安全功能,如防止垃圾邮件和恶意行为。 OpenFire的扩展性和可定制性是其一大亮点。书中会讲述如何利用OpenFire的插件...

    Openfire strophejs 跨域访问

    通过以上步骤,你就能成功地使用Strophe.js通过flXHR实现跨域访问Openfire服务器,从而实现在不同域的网页上进行即时通讯。这种方法虽然依赖于Flash插件,但仍然是一个有效的解决方案,尤其是在一些旧的或不支持...

    openfire+asmack中文api+androidDemo

    **Android Demo**,即`MyXmpp`,可能是一个演示应用,展示了如何使用Openfire服务器和ASMACK库在Android平台上实现即时通讯功能。这个示例可能包括登录、发送和接收消息、查看联系人列表、处理离线消息等功能。...

    openfire mac系统安装文件

    openfire mac系统安装文件 Openfire (formerly Wildfire) is a cross-platform real-time collaboration server based on the XMPP (Jabber) protocol.

    Openfire安装配置手册

    使用Ant编译Openfire源代码,添加build.xml文件,编译源代码。 四、 修改Openfire源代码 修改org.jivesoftware.openfire.XMPPServer类的locateOpenfire()方法,将verifyHome("..", jiveConfigName)修改为...

    openfire插件使用Demo

    openfire3.6.3插件开发方法说明: winxp/myeclipse6.5/jdk1.5&1.6/mysql5.0/openfire3.6.3 开发步骤:1. 布署openfire3.6.3源码(请参考openfire3.6.3导入eclipse项目实现方法)

    Smack访问Openfire服务器的调用

    当我们需要使用Smack来访问Openfire服务器时,主要涉及以下几个核心知识点: 1. **XMPP协议**:首先,我们需要了解XMPP是什么。XMPP是一种基于XML的实时通讯协议,用于在多个系统之间交换结构化的信息。它为开发者...

    openfire的相关资源

    在Openfire的使用过程中,可能会遇到各种报错,例如"openfire3.9.1所需jar包改过后,需要的都在.zip"可能涉及到依赖库的问题。为了解决这些问题,你可以查阅"报错集",这是一个包含了Openfire常见错误及其解决方案的...

    openfire Im android 客户端

    3. **联系人管理**:用户可以查看和管理自己的联系人列表,添加新的好友,同时可以查看好友的状态,了解他们是否在线。 4. **群聊功能**:支持创建和参与群组聊天,方便团队协作或社交交流。 5. **离线消息**:...

    基于openfire 仿QQ

    - 客户端需要实现登录注册、好友管理、群组功能、发送接收消息等功能,这些都涉及到Android的Activity、Fragment、Intent等组件的使用。 3. **Openfire集成**: - 开发者需要在Android客户端中集成Smack库,这是...

    基于openfire的安卓聊天软件

    本项目聚焦于基于Openfire的Android聊天软件开发,旨在为用户提供一个可以注册、登录、聊天、查找和添加好友的全方位沟通平台。 【描述】:“基于openfire的Android聊天软件,可注册 登陆 聊天 查找 添加好友” ...

    linux下openfire安装配置

    在Linux环境下,Openfire是一款基于Java的开源即时通讯(IM)服务器,它允许用户通过XMPP协议进行实时通信。为了在Linux系统上成功安装并配置Openfire,我们需要遵循一系列步骤,涉及的主要组件包括JDK(Java ...

    asmack连接openfire测试

    3. 建立连接:使用XMPPTCPConnection类创建连接实例,并调用connect()方法尝试连接到Openfire服务器。 4. 登录验证:连接成功后,使用login()方法进行用户身份验证。这需要提供用户名、密码以及可选的资源名(如...

    OpenFire所有在线用户

    8. **扩展与集成**:OpenFire支持与其他系统的集成,例如与其他应用同步用户数据,或者通过Webhook实现事件通知。 在OpenFire的压缩包文件"onlineuser"中,可能包含了插件的源代码、配置文件或其他资源,你可以通过...

Global site tag (gtag.js) - Google Analytics