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

java的分布式方式h和xmpp协议

    博客分类:
  • java
 
阅读更多

1:接触多了RMI,以前感觉分布式很神奇,其实现在看看感觉就是 把一个大的系统分开很多独立的子系统,主要是解决子系统间相互通信的问题。

 

在java中  : 实现的方法有: RMI, SPEING RMI等

这个是基于 远程服务

 

2:基于消息的实现。  java io 或者 java nio 或 apache mina服务器 管理socket等。

 

 

 

最近接触到XMPP协议 ,实现推送的  , 在研究 androidpn代码, 看到 有大神 直接打包在tomcat下部署了的,忘了在那个地方了。

 

下面说说,xmpp的JID的。

 

 

public class JID
  implements Comparable<JID>, Serializable
{
  private static final long serialVersionUID = 8135170608402192877L;
  private static final ConcurrentMap<String, ValueWrapper<String>> NODEPREP_CACHE = ConcurrentLinkedHashMap.create(ConcurrentLinkedHashMap.EvictionPolicy.SECOND_CHANCE, 10000);
  private static final ConcurrentMap<String, ValueWrapper<String>> DOMAINPREP_CACHE = ConcurrentLinkedHashMap.create(ConcurrentLinkedHashMap.EvictionPolicy.SECOND_CHANCE, 500);
  private static final ConcurrentMap<String, ValueWrapper<String>> RESOURCEPREP_CACHE = ConcurrentLinkedHashMap.create(ConcurrentLinkedHashMap.EvictionPolicy.SECOND_CHANCE, 10000);
  private final String node;
  private final String domain;
  private final String resource;
  private final String cachedFullJID;
  private final String cachedBareJID;

public JID(String node, String domain, String resource, boolean skipStringprep)
  {
    if (domain == null) {
      throw new NullPointerException("Domain cannot be null");
    }
    if (skipStringprep) {
      this.node = node;
      this.domain = domain;
      this.resource = resource;
    }
    else
    {
      if ((node != null) && (node.equals(""))) {
        node = null;
      }
      if ((resource != null) && (resource.equals(""))) {
        resource = null;
      }
      try
      {
        this.node = nodeprep(node);
        this.domain = domainprep(domain);
        this.resource = resourceprep(resource);
      }
      catch (Exception e) {
        StringBuilder buf = new StringBuilder();
        if (node != null) {
          buf.append(node).append("@");
        }
        buf.append(domain);
        if (resource != null) {
          buf.append("/").append(resource);
        }
        throw new IllegalArgumentException("Illegal JID: " + buf.toString(), e);
      }

    }

    StringBuilder buf = new StringBuilder(40);
    if (this.node != null) {
      buf.append(this.node).append("@");
    }
    buf.append(this.domain);
    this.cachedBareJID = buf.toString();

    if (this.resource != null) {
      buf.append("/").append(this.resource);
      this.cachedFullJID = buf.toString();
    }
    else {
      this.cachedFullJID = this.cachedBareJID;
    }
  }

  static String[] getParts(String jid)
  {
    String[] parts = new String[3];
    String node = null;
    if (jid == null) {
      return parts;
    }

    int atIndex = jid.indexOf("@");
    int slashIndex = jid.indexOf("/");

    if (atIndex > 0) {
      node = jid.substring(0, atIndex);
    }

    if (atIndex + 1 > jid.length())
      throw new IllegalArgumentException("JID with empty domain not valid");
    String domain;
    String domain;
    if (atIndex < 0)
    {
      String domain;
      if (slashIndex > 0) {
        domain = jid.substring(0, slashIndex);
      }
      else
        domain = jid;
    }
    else
    {
      String domain;
      if (slashIndex > 0) {
        domain = jid.substring(atIndex + 1, slashIndex);
      }
      else
        domain = jid.substring(atIndex + 1);
    }
    String resource;
    String resource;
    if ((slashIndex + 1 > jid.length()) || (slashIndex < 0)) {
      resource = null;
    }
    else {
      resource = jid.substring(slashIndex + 1);
    }
    parts[0] = node;
    parts[1] = domain;
    parts[2] = resource;
    return parts;
  }


 这个是tinder-1.2.1.jar包中的JID实现。

下面看 xmpp中JID的定义:

 

每个JID 由三部分组成:节点、域和资源。域部分总是必需的,但其他两部分是可选的,
具体取决于它们所处的具体环境。
域是实体(服务器、组件或插件)的可解析DNS 名称。仅由域组成的JID 是有效地址,它表
示服务器地址。指向域的节将由服务器自身处理,并可能被路由到某个组件或插件。
本地部分通常会识别域中的一个特定用户。它出现在JID 的开头并位于域之前,它与JID
剩余部分之间通过@字符隔开,就像是电子邮件地址的节点部分。本地部分还可以用来识别

 androidpn中:

sessionManage类中:

 

    public ClientSession getSession(String username) {
        // return getSession(new JID(username, serverName, null, true));
        return getSession(new JID(username, serverName, RESOURCE_NAME, true));
    }

  private static final String RESOURCE_NAME = "AndroidpnClient";

 

分享到:
评论

相关推荐

    XMPP协议中文参考指南

    XMPP(Extensible Messaging and Presence Protocol)是一种基于 XML 的协议,用于实时交换消息和出席信息。该协议的核心功能定义在 RFC 3920 中,包括 XML 流、TLS 和 SASL 加密、流的根元素之下的 `&lt;message/&gt;`、`...

    XMPP协议中文版

    XMPP协议的核心功能被定义在RFC3920和RFC3921中,分别涉及核心协议和即时消息与出席协议(XMPP-IM)。 通用架构章节阐述了XMPP协议所采用的客户-服务器模型,该模型允许任意两个网络终端通过TCP连接实现结构化信息...

    XMPP协议(可扩展消息出席协议):核心.doc

    XMPP 1.0的核心功能定义了协议的基础,而即时消息和出席信息功能则在XMPP-IM协议中进行了扩展定义。 **1.2 术语** 文档中的关键字如"MUST"、"SHOULD"等遵循BCP14和RFC2119中定义的标准含义,用于规范协议的使用和...

    XMPP协议中文帮助文档

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,被广泛应用于即时通讯、在线状态管理和数据交换等领域。这份"XMPP协议中文帮助文档"无疑为那些需要理解和应用XMPP技术的开发者...

    xmpp协议demo

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要用于即时消息和在线状态的传输。这个“xmpp协议demo”很显然是一个演示如何使用XMPP协议的项目,可能包含客户端和服务器端的...

    JAVA实现XMPP客户端和服务器

    总结,使用Java实现XMPP客户端和服务器,涉及到的知识点包括XMPP协议原理、Java编程、网络通信、XML处理、服务器部署以及客户端UI设计。通过该项目,开发者可以深入理解和实践即时通讯系统的构建,提升相关技能。

    xmpp协议相关的jar和中文文档

    XMPP(Extensible Messaging and Presence Protocol)是一种开放的即时通讯协议,主要用于构建实时通信系统,如聊天应用、社交网络和协作工具。它基于XML(可扩展标记语言)设计,允许开发者构建灵活、可扩展的通信...

    xmpp协议和xmpp扩展协议

    xmpp协议和xmpp扩展协议,chm格式

    XMPP协议中文版.doc

    XMPP(可扩展消息和出席信息协议)作为国际标准之一,它基于XML流技术,为网络上的两个节点之间提供了一种开放、可扩展、安全的即时通讯解决方案。本文将深入探讨XMPP协议的核心功能及其在现代通信中的应用和重要性...

    XMPP协议之RFC6120

    XMPP协议是互联网工程任务组(IETF)定义的一种应用层协议,全称是Extensible Messaging and Presence Protocol(可扩展消息和存在协议)。XMPP基于可扩展标记语言(XML),支持任何两个或多个网络实体之间进行近...

    基于XMPP协议的Android即时通信应用项目源码

    1. **理解XMPP协议原理**:学习XMPP的底层工作方式,包括XML流的解析和构建,以及如何处理连接、认证和消息传递。 2. **Smack库使用**:深入研究Smack的API文档,了解如何创建连接、发送和接收消息、管理用户状态等...

    XMPP协议 C#实例

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要用于即时消息和在线状态的传递。在本文中,我们将深入探讨如何使用C#语言实现XMPP协议,并通过一个名为"ConsoleXmpp"的示例...

    xmpp客户端协议实现源代码

    让我们深入探讨一下SMACK库和XMPP协议的相关知识点。 **SMACK库** 1. **SMACK简介**:SMACK是Simple XMPP Client Library for Java的缩写,是一个开源的Java库,用于构建XMPP客户端应用。它提供了与XMPP服务器交互...

    基于xmpp协议的多端即时通讯

    5. Xmpp提供电子名片协议:XMPP中的Jabber分布式目录协议(Jabber Distributed Roster Protocol,JDR)允许用户分享和管理联系人信息。 6. XMPP系统特点:XMPP系统设计上具有分布式和可扩展性,可以很容易地增加新...

    分布式 XMPP Server 共32页.ppt

    总结来说,分布式XMPP Server利用XMPP协议的强大功能和开源社区的支持,构建了能够处理大规模用户的即时通讯系统。结合Zookeeper和云原生原则,它能够在复杂的网络环境中提供稳定、高效的通信服务。而与Web和移动...

    xmpp协议介绍,XMPP体系架构

    总之,XMPP是一个强大且灵活的即时通讯协议,它的开放式架构和XML基础使其成为构建分布式、安全即时通讯系统的理想选择。通过服务器的组件化设计和丰富的扩展机制,XMPP可以适应各种复杂的通信需求,并与其他通讯...

    类似QQ的xmpp协议聊天

    总结,通过使用XMPP协议和Android开发技术,我们可以构建一个类似QQ的聊天应用,提供丰富的即时通讯功能。在实践中,我们需要关注协议的正确实现、用户体验的设计,以及数据安全和隐私保护等方面,以打造一个稳定、...

    xmpp协议的使用中文WORD版最新版本

    XMPP的核心优势在于其开放性、可扩展性以及分布式网络的特点,使得它成为构建实时应用的首选协议之一。XMPP协议的使用包括在客户端和服务器之间传输消息、控制出席信息、进行消息管理等多个方面。 在Android平台上...

    Java开发 基于Xmpp的IM即时通讯项目

    【Java开发 基于Xmpp的IM即时通讯项目】是一个使用Java编程语言构建的实时通信应用程序,它基于XMPP(Extensible Messaging and Presence Protocol)协议。XMPP是一种开放的标准,用于实现即时消息传递和在线状态...

Global site tag (gtag.js) - Google Analytics