Skip to content

Commit 7b5866f

Browse files
committed
搜索用户
1 parent 9977532 commit 7b5866f

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

7-搜索用户.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# 搜索用户
2+
3+
搜索好友模块,在XMPPFrameWork模块中暂时未实现,咱们先看一下客户端和服务器的报文交互吧。
4+
5+
关于搜索用户的协议,可以参考 [xep-0055](http://xmpp.org/extensions/xep-0055.html) 协议(主要查看 3. Extensibility 这一节)
6+
7+
## 报文
8+
9+
**以下报文为 Spark 和 openFire 抓包,跟正式的xep-0055协议貌似有些不一致(咱们还是以具体的抓包为准吧)**
10+
11+
1. 首先,为了搜索用户,需要先去服务器询问服务器支持哪种关键字搜索
12+
13+
<iq id="7OiRr-37" to="search.192.168.1.115" type="get">
14+
<query xmlns="jabber:iq:search"/>
15+
</iq>
16+
17+
2. 服务器返回支持的关键字搜索类型
18+
19+
<iq id="7OiRr-37" to="[email protected]/mobile" from="search.192.168.1.115" type="result">
20+
<query xmlns="jabber:iq:search">
21+
<FORM_TYPE>jabber:iq:search</FORM_TYPE>
22+
<Username>1</Username>
23+
<Name>1</Name>
24+
<Email>1</Email>
25+
</query>
26+
</iq>
27+
28+
从报文能看到,服务器支持 Username、Name、Email三种类型的搜索
29+
30+
3. 发送查询报文到服务器:
31+
32+
<iq id="7OiRr-38" to="search.192.168.1.115" type="set">
33+
<query xmlns="jabber:iq:search">
34+
<x xmlns="jabber:x:data" type="submit">
35+
<field var="FORM_TYPE" type="hidden">
36+
<value>jabber:iq:search</value>
37+
</field>
38+
<field var="search" type="text-single">
39+
<value>test</value>
40+
</field>
41+
<field var="Username" type="boolean">
42+
<value>1</value>
43+
</field>
44+
<field var="Name" type="boolean">
45+
<value>1</value>
46+
</field>
47+
<field var="Email" type="boolean">
48+
<value>1</value>
49+
</field>
50+
</x>
51+
</query>
52+
</iq>
53+
54+
发送的协议意思为:
55+
56+
搜索关键字为:"text",搜索的范围为:Username,Name,Email(可以看到这三个field的value都是为1,如果不想搜索 Email,可以把它设置为0)
57+
58+
4. 服务器返回搜索结果:
59+
60+
<iq id="7OiRr-38" to="[email protected]/mobile" from="search.192.168.1.115" type="result">
61+
<query xmlns="jabber:iq:search">
62+
<x xmlns="jabber:x:data" type="result">
63+
<reported>
64+
<field label="JID" var="jid" type="jid-single"/>
65+
<field label="Username" var="Username" type="text-single"/>
66+
<field label="Name" var="Name" type="text-single"/>
67+
<field label="Email" var="Email" type="text-single"/>
68+
</reported>
69+
<item>
70+
<field var="Name">
71+
<value>test1</value>
72+
</field>
73+
<field var="Email">
74+
<value/>
75+
</field>
76+
<field var="Username">
77+
<value>test1</value>
78+
</field>
79+
<field var="jid">
80+
<value>[email protected]</value>
81+
</field>
82+
</item>
83+
<field var="FORM_TYPE" type="hidden"/>
84+
</x>
85+
</query>
86+
</iq>
87+
88+
服务器返回了搜索结果,并返回了用户相应的其它属性,比如 jid、username、Email等
89+
90+
## XMPPFrameWork的实现
91+
92+
XMPPFrameWork 暂时未实现该模块,不过呢,如果你有兴趣的话,可以继承 XMPPModule 类,来做相应的扩展,这个实现起来应该还是不太难的。

0 commit comments

Comments
 (0)