Erlang Ejabberd单一请求登录
我有一个工作的Ejabberd服务器(版本2.1.9),我的客户端应用程序运行得很好,但我希望修改应用程序的XMPP客户端连接到Ejabberd的方式,以减少它们之间的请求/响应数量,因为它适用于移动环境,我希望减少初始连接时间 我查阅了XMPP协议规范()和一些协议扩展(XEP),也就是说,协议本身没有指定单请求登录和快速启动扩展,尽管其目的是减少请求数量,但这还不足以减少我所期望的时间 在搜索并没有找到任何解决方案后,我已经开始修改客户端和服务器,并希望现在完成以下工作,作为概念证明:Erlang Ejabberd单一请求登录,erlang,single-sign-on,xmpp,ejabberd,Erlang,Single Sign On,Xmpp,Ejabberd,我有一个工作的Ejabberd服务器(版本2.1.9),我的客户端应用程序运行得很好,但我希望修改应用程序的XMPP客户端连接到Ejabberd的方式,以减少它们之间的请求/响应数量,因为它适用于移动环境,我希望减少初始连接时间 我查阅了XMPP协议规范()和一些协议扩展(XEP),也就是说,协议本身没有指定单请求登录和快速启动扩展,尽管其目的是减少请求数量,但这还不足以减少我所期望的时间 在搜索并没有找到任何解决方案后,我已经开始修改客户端和服务器,并希望现在完成以下工作,作为概念证明: //
//Client Request
<?xml version='1.0'?>
<stream:stream ... user='user' pass='pass'>
//Server Response
<?xml version='1.0'?>
<stream:stream ... success='1'>
只是澄清一下:最初的客户端身份验证请求和服务器响应传输得很好,随后的请求也在传输,但没有响应
我忽略了什么
提前谢谢你@Nuno Freitas确实是失败的,谢谢你的帮助 我添加了代码:
R1 = xml:get_attr_s("r",Attrs),
R = case jlib:resourceprep(R1) of
error -> error;
"" ->
lists:concat([randoms:get_string() | tuple_to_list(now())]);
Resource -> Resource
end,
这使得服务器响应了我的请求,但还有一个问题:服务器上的
标记被破坏,因为没有定义#state.lang
,因此,我必须在wait\u for\u quickstart
函数中定义它,现在我有了一个单点登录XMPP客户机服务器的概念验证。看来您可能在路由方面有一些问题。您正在生成资源,还是用户必须发送?您没有在上面指定。通常它是在绑定操作中完成的,但由于您跳过了它,这可能就是它失败的原因。
R1 = xml:get_attr_s("r",Attrs),
R = case jlib:resourceprep(R1) of
error -> error;
"" ->
lists:concat([randoms:get_string() | tuple_to_list(now())]);
Resource -> Resource
end,