public static native void doConnect() /*-{
$wnd.jQuery(document).trigger('connect',
{
jid: 'sss',
password: 'sss'
}
);
}-*/;
Run Code Online (Sandbox Code Playgroud)
我尝试了以上,但在firebug或gwt托管模式控制台没有错误(所以我不知道代码是否成功).我可以知道这是调用jquery触发器的正确方法吗?但是当我把alert()放在bind('connect')中时,它没有被调用
$(document).bind('connect', function (ev, data) {
alert('not call.....at all');
var conn = new Strophe.Connection(
"http://bosh/xmpp-httpbind");
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;
});
Run Code Online (Sandbox Code Playgroud) 我已经实现了一个chrome扩展,允许在远程服务器上运行的punjab服务器上使用BOSH连接进行XMPP聊天.它是使用javascript Strophe库实现的.我遇到的问题是当我有同一个用户的多个会话时(例如同一台机器上的两个不同的浏览器)我无法接收并登录我从第一个聊天窗口发送的消息的第二个聊天窗口.需要有一些机制允许这样做.我可以以某种方式接收我发送给其他用户的消息吗?该问题也可以在2台或更多台机器上重现,因此这也需要解决.
谢谢.
我写了几个Android和iOS原生移动应用程序,它直接连接到我托管的XMPP服务器.他们通过XMPP推送和提取实时数据.我还使用了一些XMPP XEP扩展.对于其他操作,我在同一服务器上运行django应用程序,所有移动应用程序都通过HTTP REST接口使用该服务器.我使用Celery和Redis为django方面异步进行一些操作(比如对我的数据库进行大量的批量写入).
这一切都很好,花花公子.好极了.
但是现在我想为所有这些编写一个Web前端,所以我开始研究我的选择并且很好 - 有很多方法可以让我想要首先检查SO社区.
有一个js库给我一个统一的套接字通信API的想法(即尝试不同的Web套接字实现或回退到flash)吸引我,因此我提到了Socket IO.必须运行nodejs服务器的想法,不是那么多(还有一件事需要学习),但如果必须的话,我肯定会.我知道有些人使用gevent作为节点服务器的替代品.其他人,决定写一个小nodejs,他们连接到他们的堆栈的其余部分.我可能会这样做.
另一种选择是使用像Strophe这样的js XMPP库,我认为它不具备闪回后备功能.另外,我需要研究这对我的服务器意味着什么.
我已经阅读了关于如何做彗星和django的几个Stackoverflow答案 - 因此为什么看起来有几个选项.
问题是:
如果我想拥有Socket IO行为的优势(使用回退)并且我想将实时数据推送到Web客户端(通过XMPP送到服务器),并使用Django我最好的选择是什么?
更新:我使用的XMPP服务器是ejabberd,它也支持BOSH.我意识到我可以使用Strophe.js,因此我的通信将通过一种长轮询http连接而不是websockets.据我所知,Websockets上有一些XMPP开源库,但AFAIK社区并不像SocketIO那样活跃.
更新2:我需要支持的浏览器只是现代浏览器.我想这意味着Flash后备不会那么重要,这让我倾向于strophe.js.
我们有一个网站,我们使用strophe.js库和ejabberd XMPP服务器为它开发了一个聊天系统.我们使用由PHP启动的会话附件(使用内部库).我们所做的是从PHP脚本中获取RID和SID,然后使用strophe的会话附件.所述RID和SID存储在cookie上,并且每次更新strophe.js上的RID时,cookie上的RID值都会更新.(这样我们就可以在页面刷新/导航上重用会话ID到网站上的其他地方)
我们现在计划让它在多个选项卡/窗口上运行.我观察了Facebook的实现,并且对于每个选项卡,对某个域都有一个很长的轮询请求.每个选项卡的域名都不同.例如,选项卡一将是0.86.channel.facebook.com.第二个标签是1.86.channel.facebook.com.据我所知,这是解决浏览器限制2个活动请求到某个域.这个多域解决方案是如何实现的?
接下来将是聊天会话本身.每个标签的聊天会话会有所不同吗?UI如何与Facebook等每个标签同步?我的想法是,根据每个操作,将向用户自己的JID发送一条消息,其中包含与聊天相关的操作.例如,打开聊天窗口会发送一个消息节,如下所示:
<message from="my_own_jid" to="my_own_jid" type="chat">
<body>{"jid-of-contact":"open-chat-box"}</body>
</message>
Run Code Online (Sandbox Code Playgroud)
这将被捕获在聊天客户端上,UI将相应调整(在这种情况下,打开联系人的聊天框).
有关此实施的任何建议/意见?
谢谢!
有人可以解释什么是strophe?
我相信它与XMPP有关?
如何使用Jquery将其合并到网站中?
我使用strophe.js库在浏览器中发送和接收XMPP消息.它工作正常,但仅限于我已经在我的联系人列表中的用户 - 名单.
我需要在我的名册中添加一个人(我知道他的地址).我如何使用strophe.js实现这一目标?这对我很重要,因为gmail拒绝向我名单中没有的人发送消息.我想获得订阅:两者都能够接收和发送消息.
是否有任何现有的解决方案可以提供基于Strophe.js的聊天应用程序的状态处理?
我有基于Strophe.js的简单聊天应用程序.我只想显示在线和动态更改列表的用户.我想知道是否有任何现有的解决方案(可能是Strophe插件)来处理这个问题.如果没有这样的东西,那么实现它的最佳/最简单方法是什么?
我试图使用内部Ejabberd网络服务器在Ubuntu 12(Linode最新版本)上使用Ejabberd设置Strophe来进行聊天.
测试网址(http-bind和admin)都有效.
JWChat有效.
Strophe抛出一个错误:
In Strophe:
RECV: <body xmlns='http://jabber.org/protocol/httpbind' type='terminate' condition='internal-server-error'>BOSH module not started</body>
In ejabberd.log:
E(<0.468.0>:ejabberd_http_bind:1236) :
You are trying to use BOSH (HTTP Bind) in host "admin", but the module mod_http_bind is not started in that host.
Configure your BOSH client to connect to the correct host, or add your desired host`
Run Code Online (Sandbox Code Playgroud)
安装很简单(虽然花了很长时间才能解决这个问题):
对ejabberd.cfg的更改:
%% In listening ports, amended the following lines:
{ request_handlers, [
{["pub"], mod_http_fileserver},
{["http-bind"], …Run Code Online (Sandbox Code Playgroud) 以下请求经常超时:
<body rid='57993057' xmlns='http://jabber.org/protocol/httpbind' sid='1db840cbfd20e3922f594cc2017421a1858cca7a'><a xmlns='urn:xmpp:sm:3' h='9'/></body>
Run Code Online (Sandbox Code Playgroud)
控制台日志显示:
请求的资源上不存在"Access-Control-Allow-Origin"标头.
我正在使用带有haproxy的ejabberd服务器.
我已经在Ubunut OS上安装了ejabberd.
配置ejabberd.yml为:
port: 5280
ip: "::"
module: ejabberd_http
request_handlers:
"/ws": ejabberd_http_ws
"/bosh": mod_bosh
"/a/b/": mod_foo
"/api": mod_http_api
web_admin: true
http_bind: true
register: true
captcha: true
Run Code Online (Sandbox Code Playgroud)Webclient:https://github.com/processone/xmpp-websocket-client
注意:能够使用jabber客户端和spark连接和聊天.
尝试连接webclient作为获取响应,如下所示:
client Request: <?xml version="1.0"?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0"
xmlns="jabber:client" to="localhost" xml:lang="en"
xmlns:xml="http://www.w3.org/XML/1998/namespace" >
Server Response: <stream:stream id='14754768778694635521' version='1.0' xml:lang='en'
xmlns:stream='http://etherx.jabber.org/streams' from='localhost'
xmlns='jabber:client'>
<stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism><mechanism>PLAIN</mechanism><mechanism>X-OAUTH2</mechanism></mechanisms></stream:features>
Client request: <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>
Server Response: <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>bm9uY2U9IjE2NDY5ODExMTQ0NDkyMDQyMjQxIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz</challenge>
Client Request: <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>dXNlcm5hbWU9Im1hbm9qIixyZWFsbT0iIixub25jZT0iMTY0Njk4MTExNDQ0OTIwNDIyNDEiLGNub25jZT0iZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiLG5jPSIwMDAwMDAwMSIscW9wPSJhdXRoIixkaWdlc3QtdXJpPSJ4bXBwL2xvY2FsaG9zdCIscmVzcG9uc2U9ImJhMjhjNTQwYzU5ZTczZGE1NGY1MmU2YjYxYTFhMjlmIixjaGFyc2V0PSJ1dGYtOCI=</response>
Server Response: <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cnNwYXV0aD0xMzc3MzJjMzc3M2FhMjIxNzg0Y2RmYTIxY2RkNzZjMQ==</challenge>
CR: <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
SR <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
CR: <?xml version="1.0"?><stream:stream …Run Code Online (Sandbox Code Playgroud)