qxmpp(服务器):将消息路由到特定资源

qxmpp(服务器):将消息路由到特定资源,xmpp,qxmpp,Xmpp,Qxmpp,我正在使用qxmpp库编写一个小型xmpp服务器。现在我想自己做消息路由:如果我理解服务器的实现是正确的,那么服务器将使用一个简单的JID转发消息contact@myxmpp在该裸JID的所有连接资源的“to”属性中。 我想创建一个实现,该实现考虑优先级并只将消息发送到最可用的资源 使用QXmppServer实现这一点的唯一方法似乎是将to字段更改为完整JID,但RFC禁止在这种情况下使用此字段。RFC 6121,8.5.2.1.1最后一段:在所有情况下,服务器不得重写“to”属性 在当前版本0

我正在使用qxmpp库编写一个小型xmpp服务器。现在我想自己做消息路由:如果我理解服务器的实现是正确的,那么服务器将使用一个简单的JID转发消息contact@myxmpp在该裸JID的所有连接资源的“to”属性中。 我想创建一个实现,该实现考虑优先级并只将消息发送到最可用的资源

使用QXmppServer实现这一点的唯一方法似乎是将to字段更改为完整JID,但RFC禁止在这种情况下使用此字段。RFC 6121,8.5.2.1.1最后一段:在所有情况下,服务器不得重写“to”属性


在当前版本0.8.0中,是否有我没有看到的技巧,或者不可能实现这一点,并且我必须为qxmpp打开一个问题/创建一个补丁?

您所说的大多数可用资源是什么意思?你是指你想要的资源吗?@elgolondrino:我从RFC中得到了这个术语,它说服务器必须要么将消息传递给最可用的资源,要么根据服务器特定于实现的算法将消息传递给资源。所以基本上是的,我指的是我想要的资源,例如具有最高存在优先级的资源或用于发送最后一条消息的资源。我的建议是,创建从QXmppServerExtension继承的类,并将对象添加到QXmppServer扩展。重写你自己的HandleTanza,在那里你可以捕捉到服务器上的每一个查询,并用你自己的方式管理它@埃尔戈隆德里诺:谢谢你的建议。我已经在这么做了,虽然我不知道你所说的将对象添加到扩展中的确切含义,但实际上向客户机发送节的唯一方法是我所知道的服务器->发送包…,服务器->发送元素。。和服务器->handleElement。。。最后一个导致这一节也再次呈现给我的分机。如果我没有发现任何错误,那么当“to”属性包含一个简单的JID时,它们都会将该节发送给所有连接的资源。所以这不是我问题的解决方案。我的意思是,在创建了自己的类(例如,从QXmppServerExtension继承的ServerExtension)之后,将前面提到的类的对象添加到QXmppServer的扩展中。在ServerExtension中,重写HandleTanza方法以捕获扩展中的每条消息。