strophe与openfire模拟的XMPP简单hello程序
/*
* 参考《XMPP高级编程+使用JavaScript和jQuery》第三章例子。
* 我修改了作者的XMPP服务器到本地的openfire。JavaScript跨域请求,使用Nginx代理。另外,添加了些备注笔记。
*
* 几个概念
*
* 1) BOSH(Bidirectional streams Over Synchronous HTTP,在同步HTTP之上传送双向数据流),是一种XMPP的长轮询桥接技术
* 2) Comet(反向HTTP),同上也是长轮询一种
* 3) 很多XMPP服务器都内置了对BOSH的支持,这种服务叫做“BOSH连接管理器”,通常以URL http://example.com:5280/http-bind或者http://example.com:5280/xmpp-httpbind来提供服务。
* 4) 书上的连接管理器的测试URL为http://bosh.metajack.im:5280/xmpp-httpbind
*
*/
//命名空间对象(存储应用程序状态和全局变量)
var myNamespace = {
some_global: 0,
another_global: true,
my_adder: function(x, y){
return x+y;
}
};
// 创建自己的命名空间对象Hello
var Hello = {
connection: null,
start_time: null,
// 输出日志
log: function(msg){
$('#log').append(" "+msg+" ");
},
// 定义打招呼用的节内容,并连接server。连接成功以后调用handler操作。
send_ping: function(to){
var ping = $iq({
to: to,
type: "get",
id: "ping1"
}).c("ping", {xmlns: "urn:xmpp:ping"});
Hello.log("Sending ping to "+to+".");
Hello.start_time = (new Date()).getTime();
Hello.connection.send(ping);
},
// 连接后的handler方法
handle_pong: function(iq){
var elapsed = (new Date()).getTime() - Hello.start_time;
Hello.log("Received pong from server in "+elapsed+"ms");
Hello.connection.disconnect();
return false;//不销毁
}
}
// XMPP连接通过Strophe.Connection对象管理
$(document).ready(function(){
// 控制出发按钮,就出现id为login_dialog的div
$('#login_dialog').dialog({
autoopen: true,
draggable: false,
modal: true,
title: 'Connect to XMPP',
buttons: {
"Connect": function(){
$(document).trigger('connect', {//启动connect自定义事件,传入jid和password
jid: $('#jid').val(),
password: $('#password').val()
}); $('#password').val('');// 一旦触发,密码口令被清空
$(this).dialog('close');
}
}
});
// 1) 处理XMPP的connect事件,即创建Strophe.Connection对象并调用connect()方法。
// 2) 提供一个能够相应连接状态变化的回调函数
$(document).bind('connect', function(ev, data){
// var conn = new Strophe.Connection("http://bosh.metajack.im:5280/xmpp-httpbind");
var conn = new Strophe.Connection("http://timelyxyzmacbookpro.local:7070/http-bind/");
conn.connect(data.jid, data.password, function(status){
if(status === Strophe.Status.CONNECTED){
$(document).trigger('connected');
}else if(status === Strophe.Status.DISCONNECTED){
$(document).trigger('disconnected');
}
});
Hello.connection = conn;
}); $(document).bind('connected', function(){
Hello.log("Connection established.");// 通知用户 Hello.connection.addHandler(Hello.handle_pong, null, "iq", null, "ping1");// handler在send_ping里的send完成之后立马执行,此处只是提前声明handler
var domain = Strophe.getDomainFromJid(Hello.connection.jid);
console.log(domain);
Hello.send_ping(domain);
}); $(document).bind('disconnected', function(){
Hello.log("Connection terminated.");
Hello.connection = null;// 释放已销毁的connection对象引用
});
});
strophe与openfire模拟的XMPP简单hello程序的更多相关文章
- iOS中XMPP简单聊天实现 好友和聊天
版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...
- iOS开发拓展篇-XMPP简单介绍
iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...
- iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备
XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...
- 自己模拟的一个简单的web服务器
首先我为大家推荐一本书:How Tomcat Works.这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的. Servlet容器 ...
- Linux——模拟实现一个简单的shell(带重定向)
进程的相关知识是操作系统一个重要的模块.在理解进程概念同时,还需了解如何控制进程.对于进程控制,通常分成1.进程创建 (fork函数) 2.进程等待(wait系列) 3.进程替换(exec系列) 4 ...
- python练习笔记——编写一个装饰器,模拟登录的简单验证
编写一个装饰器,模拟登录的简单验证(至验证用户名和密码是否正确) 如果用户名为 root 密码为 123则正确,否则不正确.如果验证不通过则不执行被修饰函数 #编写一个装饰器,模拟登录的简单验证 #只 ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- 用python开发简单ftp程序
根据alex老师视频开发的简单ftp程序,只能实现简单的get功能 ftp客户端程序: #!/usr/bin/env python #_*_ coding:utf-8 _*_ import socke ...
- 关于SIGSLOT的一个简单的程序
废话少说直接看代码即可,这只是一个简单的程序,可以帮我们简单地明白SIGSLOT是怎么回事.至于深入研究自己去百度吧. #include "sigslot.h" using nam ...
随机推荐
- 微信开放接口获取用户昵称保存到MySQL中为空白
微信昵称中包含emoji表情标签,某些标签是使用了4字节编码的UTF8. 而大多数MySQL数据库现在使用的是3字节UTF8编码,这样会导致保存为空,且不会提示失败. 解决方法有2个,一个是升级到My ...
- 【NOIP2013 普及组】车站分级
[NOIP2013 普及组]车站分级 一.题目 [NOIP2013 普及组]车站分级 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 0 [提交][状态][讨论版] 题目描述 ...
- numpy函数:[6]arange()详解
arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,会python的人肯定经常用range函数,比如在for循环中,几乎都用到了range,下面我们通过range来学 ...
- hzau 1210 Happiness
1210: Happiness Time Limit: 1 Sec Memory Limit: 1280 MBSubmit: 1149 Solved: 301[Submit][Status][We ...
- JProfiler连接weblogic
转 http://blog.csdn.net/xu1314/article/details/7737236
- mobiscroll时间控件
https://docs.mobiscroll.com/3-0-0_beta/javascript/numpad#events 这个是官方的日期插件,日历,什么效果都有,很强大的. mobiscrol ...
- HDU - 5412 CRB and Queries (整体二分)
题目链接 动态区间第k小,但是这道题的话用主席树+树状数组套线段树的空间复杂度是O(nlog2n)会爆掉. 另一种替代的方法是用树状数组套平衡树,空间复杂度降到了O(nlogn),但我感觉平衡树是个挺 ...
- php写入数据到mysql数据库中出现乱码解决方法
乱码情况: 在选择数据库前加入一句代码即可 mysql_query("set names utf8"); 最后效果
- [转]css讲解 font-weight:bold和bolder区别
font-weight 字体浓淡(精细)属性 该CSS属性用来设定字体的浓淡程度. 值:normal | bold | bolder | lighter | 100 | 200 | 300 | 400 ...
- 三层自动生成 完整源代码(for oracle)
using Oracle.DataAccess.Client; using System; using System.Collections.Generic; using System.Compone ...