gpt4 book ai didi

multithreading - 研究 XMPP 应用程序的线程实现的好资源是什么?

转载 作者:行者123 更新时间:2023-12-03 13:06:12 27 4
gpt4 key购买 nike

据我了解,XMPP 协议(protocol)基于始终在线的连接,您无法立即指示 XML 消息何时结束。

这意味着您必须在流来时对其进行评估。这也意味着,您可能必须处理异步连接,因为套接字可能会阻塞在 XML 消息的中间,原因可能是消息长度或连接速度慢。

我会很感激每个答案的一个来源,这样我们就可以修改它们,看看最喜欢的是什么。

最佳答案

您想一次处理多个连接吗?在这种情况下,良好的异步套接字处理是必须的,以避免每个连接一个线程。

否则,您只需要一个可以一次处理一大块字节的 XML 解析器。 Expat是典型的例子;如果您使用 Java,请尝试 XP .这些类型的 XML 解析器将尽可能触发事件,并缓冲部分节,直到其余节到达。

现在,为了解决您关于节结束时没有通知的断言,这不是真的。重要的是不要将 XML 流当作文档序列来处理。使用以下伪代码:

stanza = null
while parser has more:
switch on token type:
START_TAG:
elem = create element from parser state
if stanza is not null:
add elem as child of stanza
stanza = elem
END_TAG:
parent = parent of stanza
if parent is not null:
fire OnStanza event
stanza = parent

这种方法应该适用于基于事件的解析器或拉式解析器。它只需要保持一个指针的状态。显然,您还需要处理属性、字符数据、实体引用(如 & 等)和特殊用途的 stream:stream 标记,但这应该可以帮助您入门。

关于multithreading - 研究 XMPP 应用程序的线程实现的好资源是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/107772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com