- 浏览: 584862 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (253)
- java (84)
- python (22)
- 设计模式 (12)
- 数据结构和算法 (7)
- ibatis (1)
- 数据挖掘 (2)
- 集体智慧读书笔记 (1)
- ubuntu (4)
- lucene (11)
- 算法 第4版 (11)
- apache mina (16)
- memcached (1)
- android (9)
- netty (6)
- mongodb (2)
- maven (2)
- openfire (2)
- 服务端 (21)
- 产品 (0)
- apache (1)
- 选择 (2)
- 构架WEB高性能站点 (7)
- redis (8)
- 诗词歌赋 (3)
- 源代码阅读 (5)
- 前端 (1)
- javascript (3)
- guice (1)
- 分布式 (5)
- 总结-2014 (4)
- jvm (1)
最新评论
-
liu_jiaqiang:
写的挺好
maven多项目管理 -
H972900846:
我想知道哪里整的,如果是自己写的,那有点牛呀如果是抄的请说明出 ...
SSL身份认证原理 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
定向网站爬虫---初级例子 -
fenglingabc:
经过测试,parameterType="java.u ...
mybatis获取主键和存储过程返回值 -
jyghqpkl:
[u][/u] ...
Cookie的secure 属性
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";
发表评论
-
protobuf-dt插件
2015-03-24 13:16 1443protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 632今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 724闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 16371: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9473Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 6011: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 546转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 794简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 713一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7811: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13861: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 765今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 8781:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 600http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 456Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1139多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11961:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 39431:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 7651: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
XMPP(Extensible Messaging and Presence Protocol)是一种基于 XML 的协议,用于实时交换消息和出席信息。该协议的核心功能定义在 RFC 3920 中,包括 XML 流、TLS 和 SASL 加密、流的根元素之下的 `<message/>`、`...
XMPP协议的核心功能被定义在RFC3920和RFC3921中,分别涉及核心协议和即时消息与出席协议(XMPP-IM)。 通用架构章节阐述了XMPP协议所采用的客户-服务器模型,该模型允许任意两个网络终端通过TCP连接实现结构化信息...
XMPP 1.0的核心功能定义了协议的基础,而即时消息和出席信息功能则在XMPP-IM协议中进行了扩展定义。 **1.2 术语** 文档中的关键字如"MUST"、"SHOULD"等遵循BCP14和RFC2119中定义的标准含义,用于规范协议的使用和...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,被广泛应用于即时通讯、在线状态管理和数据交换等领域。这份"XMPP协议中文帮助文档"无疑为那些需要理解和应用XMPP技术的开发者...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要用于即时消息和在线状态的传输。这个“xmpp协议demo”很显然是一个演示如何使用XMPP协议的项目,可能包含客户端和服务器端的...
总结,使用Java实现XMPP客户端和服务器,涉及到的知识点包括XMPP协议原理、Java编程、网络通信、XML处理、服务器部署以及客户端UI设计。通过该项目,开发者可以深入理解和实践即时通讯系统的构建,提升相关技能。
XMPP(Extensible Messaging and Presence Protocol)是一种开放的即时通讯协议,主要用于构建实时通信系统,如聊天应用、社交网络和协作工具。它基于XML(可扩展标记语言)设计,允许开发者构建灵活、可扩展的通信...
xmpp协议和xmpp扩展协议,chm格式
XMPP(可扩展消息和出席信息协议)作为国际标准之一,它基于XML流技术,为网络上的两个节点之间提供了一种开放、可扩展、安全的即时通讯解决方案。本文将深入探讨XMPP协议的核心功能及其在现代通信中的应用和重要性...
XMPP协议是互联网工程任务组(IETF)定义的一种应用层协议,全称是Extensible Messaging and Presence Protocol(可扩展消息和存在协议)。XMPP基于可扩展标记语言(XML),支持任何两个或多个网络实体之间进行近...
1. **理解XMPP协议原理**:学习XMPP的底层工作方式,包括XML流的解析和构建,以及如何处理连接、认证和消息传递。 2. **Smack库使用**:深入研究Smack的API文档,了解如何创建连接、发送和接收消息、管理用户状态等...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要用于即时消息和在线状态的传递。在本文中,我们将深入探讨如何使用C#语言实现XMPP协议,并通过一个名为"ConsoleXmpp"的示例...
让我们深入探讨一下SMACK库和XMPP协议的相关知识点。 **SMACK库** 1. **SMACK简介**:SMACK是Simple XMPP Client Library for Java的缩写,是一个开源的Java库,用于构建XMPP客户端应用。它提供了与XMPP服务器交互...
5. Xmpp提供电子名片协议:XMPP中的Jabber分布式目录协议(Jabber Distributed Roster Protocol,JDR)允许用户分享和管理联系人信息。 6. XMPP系统特点:XMPP系统设计上具有分布式和可扩展性,可以很容易地增加新...
总结来说,分布式XMPP Server利用XMPP协议的强大功能和开源社区的支持,构建了能够处理大规模用户的即时通讯系统。结合Zookeeper和云原生原则,它能够在复杂的网络环境中提供稳定、高效的通信服务。而与Web和移动...
总之,XMPP是一个强大且灵活的即时通讯协议,它的开放式架构和XML基础使其成为构建分布式、安全即时通讯系统的理想选择。通过服务器的组件化设计和丰富的扩展机制,XMPP可以适应各种复杂的通信需求,并与其他通讯...
总结,通过使用XMPP协议和Android开发技术,我们可以构建一个类似QQ的聊天应用,提供丰富的即时通讯功能。在实践中,我们需要关注协议的正确实现、用户体验的设计,以及数据安全和隐私保护等方面,以打造一个稳定、...
XMPP的核心优势在于其开放性、可扩展性以及分布式网络的特点,使得它成为构建实时应用的首选协议之一。XMPP协议的使用包括在客户端和服务器之间传输消息、控制出席信息、进行消息管理等多个方面。 在Android平台上...
【Java开发 基于Xmpp的IM即时通讯项目】是一个使用Java编程语言构建的实时通信应用程序,它基于XMPP(Extensible Messaging and Presence Protocol)协议。XMPP是一种开放的标准,用于实现即时消息传递和在线状态...