`
iluoxuan
  • 浏览: 572661 次
  • 性别: 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";

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics