编写自己的 HTTP 服务器
我计划编写一个 HTTP 服务器:
将有两个模块(L 和 P),都是可执行文件。
这些可执行文件之一 (L) 将侦听 HTTP 请求,并将其简单地转发给具有所有 HTTP 解析逻辑并执行进一步操作的其他可执行文件 (P)。可能有许多“P”,其连接信息/参数将为侦听器 L 所知。
想法是,如果其中一个 P 崩溃,则可以使用其他 P 等。此外,可以运行一个 P 来与 DB 的一份副本和其他副本进行交互。 PS与其他副本。
现在,我很困惑是选择 L&P 组合还是仅使用 L 来监听、接收、解析请求并响应。
如果我选择 L&P 组合,则会产生一些开销,因为请求从 L 转发到 P,然后从 P 转发到 L。
- 对于每秒 100,000 次点击,可以忽略此开销吗?
I'm planning to write an HTTP Server:
There will be two modules (L & P), both executables.
One of those executables (L) will be listening to HTTP request and will simply forward it to other executable (P) which has all HTTP parsing logic and do further stuff. There may be number of 'Ps' whose connection info/params will be known to listener L.
Idea is if one of the Ps crashes other can be used etc. Moreover, one P can be run to interact with one copy of DB and other Ps with other replica.
Now, I'm confused if I go for L&Ps combo or only with L which will listen, recv, parse the request and respond.
In case I go for L&P combo there will be some overhead because of request forwarded from L to P and then response from P to L.
- Can this overhead be neglected for 100,000 hits per second?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,所有现有的网络服务器有什么问题?为什么不为其中之一创建一个模块呢?
如果您想继续创建自己的服务器(如果您想完全支持 HTTP 标准,这不是一项简单的任务):创建 HTTP 服务器和模块 (.so/.dll)。只需用 try/catch 包装所有模块调用即可防止它们使您的服务器崩溃。
另一种方法是创建一个 http 解析器库,让所有 P 成为完整的 Web 服务器,并在它们前面放置一个代理/负载平衡器。通过这种方式,如果处理能力不足,您可以将任何 P 移动到新服务器。
First of all, what's wrong with all existing web servers? Why not create a module to one of those?
If you want to go ahead and create your own one (and it's not a trivial task if you want to support the HTTP standard fully): Create a HTTP server and modules (.so/.dll). Simply wrap all module calls with try/catch to prevent them from crashing your server.
Another way to do it is to create a http parser lib and let all P's be be complete web servers and put a proxy / load balancer in front them. In this way you can move any of the Ps to new servers if you run out of processing power.