gpt4 book ai didi

http - Web 服务器 - 如何解析请求?异步流标记器?

转载 作者:可可西里 更新时间:2023-11-01 15:23:52 27 4
gpt4 key购买 nike

我正在尝试以异步套接字编程风格在 C# 中创建一个简单的网络服务器。用途非常狭窄 - Comet 服务器(http 长轮询)。

我已经让 Windows 服务运行、接受连接、将请求信息转储到控制台并将简单的固定内容返回给客户端。

现在,我想不出一个可管理的策略来异步和安全地解析请求数据。我以前写过同步 LL1 解析器。我不确定 LL1 Parser 对于 HTTP 是否合适或必要。我不知道如何异步标记输入流。我所能想到的就是为每个客户端设置一个输入缓冲区,读取它,然后将其复制到 StringBuilder 并定期检查我是否有完整的请求。但这似乎效率低下,并且可能导致难以调试/维护代码。

此外,还有两个连接阶段:完整接收请求和发送响应 - 在这种情况下,经过一些延迟。一旦请求经过验证且可操作,我才打算在长轮询管理器中注册连接。但是,行为不当的客户端可能会继续发送数据并填满缓冲区,因此我认为我需要在响应阶段继续监视并清空输入流,对吗?

感谢任何关于此的指导。

我想第一步是了解是否可以在没有大型中间缓冲区的情况下高效地异步标记网络流。即使没有合适的解析器,创建分词器的挑战同样适用于一次读取输入的“行”,甚至读取到双空行(一个大分词)。我不想一次从网络读取一个字节,但我也不想读取太多字节而必须将它们存储在某个中间缓冲区中,对吧?

最佳答案

对于 HTTP,最好的方法是完全读取内存中的 header (直到您收到 \r\n\r\n),然后按 \r\n 简单地拆分> 通过 获取 header 和每个 header : 以分隔名称和值。

不需要为此使用复杂的解析器。

关于http - Web 服务器 - 如何解析请求?异步流标记器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134092/

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