高效的 XMPP 用户搜索

2024-01-05

我想有效地检查所有本地地址簿联系人(如果他们有 jabber 帐户)。用户使用手机号码在XMPP服务器上注册。 我当前将以下 XEP-0055 节发送到 ejabberd 服务器并评估结果。

<iq type="set" id="searchByUserName" to="vjud.ecoimac1.local" from="[email protected] /cdn-cgi/l/email-protection">
  <query xmlns="jabber:iq:search">
    <x xmlns="jabber:x:data" type="submit">
      <field type="hidden" var="FORM_TYPE">
        <value>jabber:iq:search</value>
      </field>
      <field var="user">
        <value>+123456789</value>
      </field>
    </x>
  </query>
</iq>

这有效但效率不高。对于每个号码都必须发送一个查询。其他应用程序(例如 WhatsApp)也可以完成相同的工作。有更有效的方法吗?


我现在有以下有效的解决方案:

在服务器端,我为 eJabberd 设置了 MySQL 数据库后端,在 Web 服务器上,PHP 界面为客户端应用程序提供了用户查找。 该应用程序发送一个 HTTP POST 请求,其中包含一组要检查的 jabber 用户名。 PHP 脚本查找哪些用户已注册并返回包含注册用户索引的响应。

<?php

// HTTP POST sent from client app
// Do authentication here...

// Read all parameters
$users = array();
$user = $_POST["username0"];
for ($i = 1; !empty($user); $i++)
{
    // Add user
    $users[] = $user;

    // Next parameter
    $user = $_POST["username".$i];
}
if (empty($users))
{
    echo "Success"; // nothing to do
    exit;
}

// Create mySQL connection
$db = mysqli_connect("localhost", "user", "password", "database");
if (!$db)
{
    $descr = mysqli_connect_error();
    echo "Error: ".$descr;
    exit;
}

// Prepare query
// SELECT username FROM users WHERE username IN ('+41796548345','+41786547544',...)
$query = "SELECT username FROM users WHERE username IN(";
foreach ($users as $user)
{
    $query .= "'".$user."',";
}
$query = rtrim($query, ",");
$query .= ")";

// Execute query and generate result
$result = "Success";
$recset = mysqli_query($db, $query); // [+41786547544,+41763428566,...]
while ($rec = mysqli_fetch_object($recset))
{
    $index = find_user($rec->username, $users);
    if ($index >= 0)
    {
        $result .= "\t".$index;
    }
}

echo $result;

function find_user($username, $users)
{
    for ($idx = 0; $idx < count($users); $idx++)
    {
        if ($users[$idx] == $username)
        {
            return $idx; // found at index
        }
    }
    return -1; // not found
}

?>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高效的 XMPP 用户搜索 的相关文章

  • 如何有效地定义基于 XML 的文本协议的传输结束?

    我想开发一个基于XML并通过TCP IP套接字传输的文本协议 假设我有一个简单的请求 响应机制 可以通过持久化发送 客户端和服务器之间的 TCP IP 连接如下
  • XEP - 0055 与 iOS 和 ejabberd?

    我正在尝试实现 ejabbed 支持的 XEP 0055 如下所示支持的 xep https www ejabberd im protocols 这是我的要求 XMPPIQ iq XMPPIQ alloc init iq addAttrib
  • iOS XMPP群聊实现

    我正在尝试使用 robbiehanson XMPPframework 创建聊天室 由于我没有得到任何示例代码或文档 我自己尝试发起一个聊天室 如下 XMPPRoomMemoryStorage rosterstorage XMPPRoomMe
  • XMPP - 名册订阅说明

    假设我的 Jabber 服务器上有 2 个用户 Alice 和 Bob 添加到名册中并订阅为both 我需要执行以下步骤 Alice 向 Bob 发送订阅请求 当 Bob 收到请求时 他会批准该请求 Bob 可能也对 Alice 的存在感兴
  • 是否可以在没有服务器的情况下实现 XMPP 点对点连接?

    我正在使用 libjingle 进行 XMPP 连接 我可以连接两个 XMPP 客户端而不需要中间有服务器吗 如果是的话我该怎么做如果不是那么为什么不可能呢 XMPP 客户端1 XMPP 客户端2 您可能无法直接使用 libjingle 执
  • 通过xmpp在android中传输文件?

    我只是想通过 xmpp 传输文件 我正在使用 asmack lib 我在下面遇到异常 E AndroidRuntime 332 FATAL EXCEPTION main E AndroidRuntime 332 java lang Null
  • 如何在 ASMACK 中解析 CustomIQ

    我正在我的应用程序中使用 ASMACK 库 我从我的服务器收到以下 IQ
  • ejabberd如何编译新模块

    Here http www ejabberd im node 2872我找到了代码 erlc I ejabberd 2 1 13 lib ejabberd 2 1 13 include pa ejabberd 2 1 13 lib ejab
  • 使用 smack 库在 JAVA 中实现 GCM CCS (XMPP)。与 gcm.googleapis.com 连接失败

    我正在尝试使用 GCM 在 android 客户端和 java 中的服务器应用程序之间进行通信 我正在使用基于 XMPP 的 GCM 因为我需要异步 双向消息 在我的客户端 1 Google Play 服务检查显示需要更新 google p
  • Android GCM:了解 XMPP

    我正在尝试使用应用程序在我的 GCM 中实现 XMPP 协议 但即使经过广泛搜索 我也不理解其背后的概念 另外 也许我并不真的需要 XMPP 来完成我想用我的应用程序做的事情 但我喜欢学习东西 让我们以 HTTP 为例 我的应用程序将 he
  • 如何在 XMPP 中实现“上次查看时间”功能(如 Whatsapp)?

    我正在开发一个聊天应用程序 并希望添加 上次查看时间 功能 我正在尝试使用存在节来实现它 但遇到一个问题 请检查下面的链接 当用户 B 也不可用时 未获取用户 A 的不可用状态 https stackoverflow com questio
  • 如何在smack中设置我的名字?

    我可以使用 connection getRoster getName 来获取联系人的名册名称 但如何set当前经过身份验证的帐户的名称 使用不同的帐户登录 说真的 你的帐户名与你的身份验证绑定在一起 没有办法强迫对方为你使用特定的昵称 但如
  • Android asmack:stateChange 从未被调用

    我正在使用 asmack xmpp 客户端构建一个聊天应用程序 聊天工作正常 我已经实施了ChatStateListener but stateChanged方法永远不会被调用 目前 为了获取撰写状态 我正在解析消息 xml 以下是撰写 文
  • ejabberd:运行安装后脚本时出错

    我正在尝试安装ejabberd在我的电脑上 但我不断收到此错误 Error running Post Install Script The installation may not have completed correctly ejab
  • 登录异常 SASL 身份验证在 android 中使用 DIGEST-MD5 asmack 机制失败

    我尝试连接 Xmpp 服务器 但出现异常 登录异常 SASL 身份验证使用 DIGEST MD5 机制失败 我使用这个代码 任何人都可以帮助我 或者代码 try if xmppConnection null ConnectionConfig
  • ejabberd 16.06 + mysql 5.5.50,消息历史记录不保存

    我使用ejabberd 16 06 mysql 5 5 50 消息历史记录没有保存 我的 ejabberd yml MySQL server odbc type mysql odbc server freldo odbc port 3306
  • 使用 Smack 库解析 XMPP 的 EventElement

    任何人都可以帮助向我展示如何解析此事件 pub 元素并获取以下数据包的消息对象 也许我的关键字 搜索词谷歌搜索不正确 但我在寻找有关此问题的文档或教程时找不到任何有用的东西 我读过一些有关 PacketParserUtils 和 XmlPu
  • 无法使用 asmack 和 XMPP 接收文件

    我正在使用 Asmack 和 XMPP 进行文件共享 我能够发送文件 但无法在另一台设备上接收文件 我做了很多研究和开发 发现了很多方法都尝试过 但都没有成功 似乎我犯了一些小错误 尝试了很多 但还没有解决我的问题 我用于发送文件的代码是
  • 使用 proguard 时,smack for android 失败

    我在 Android 应用程序中使用 smack 库 4 1 2 连接到 XMPP 服务器 当代码没有缩小时 即使用 proguard 它运行得很好 但在发布模式下 启用混淆器后 应用程序一旦连接到服务器就会崩溃 我试图按照此处的建议保持所
  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo

随机推荐