Erlang Ejabberd单一请求登录

Erlang Ejabberd单一请求登录,erlang,single-sign-on,xmpp,ejabberd,Erlang,Single Sign On,Xmpp,Ejabberd,我有一个工作的Ejabberd服务器(版本2.1.9),我的客户端应用程序运行得很好,但我希望修改应用程序的XMPP客户端连接到Ejabberd的方式,以减少它们之间的请求/响应数量,因为它适用于移动环境,我希望减少初始连接时间 我查阅了XMPP协议规范()和一些协议扩展(XEP),也就是说,协议本身没有指定单请求登录和快速启动扩展,尽管其目的是减少请求数量,但这还不足以减少我所期望的时间 在搜索并没有找到任何解决方案后,我已经开始修改客户端和服务器,并希望现在完成以下工作,作为概念证明: //

我有一个工作的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,