使用 Nginx 将 Web 请求代理到基于 .Net HttpListener 的 Json 服务的思考

问题描述 投票:0回答:2

我正在制作一个只需要提供 json 并且需要可扩展的 Web 服务。

我的印象是,Nginx 是一个比 IIS 7.5 更具可扩展性的 Web 服务器,而且与 IIS 相比,管理起来极其简单。此外,Nginx 可以很容易地使用上游模块在多个 json 服务之间进行负载平衡。

由于我只需要提供 json,我觉得 ASP.NET 和 IIS 有点矫枉过正。我只需要一些非常简单的路由和一个简单的 authcookie 机制,我可以轻松地自己编写。

现在我正在使用MVC3,但当我只提供Json服务时,我觉得它太臃肿了,而且我对我必须编写自定义Auth属性来制定默认拒绝策略、必须创建一个HttpModule来破解这一事实感到非常恼火围绕 WindowsForms 身份验证对未经授权的请求的默认重定向,通常需要阅读和学习很多内容才能保持对框架的控制。我也考虑过WCF,但我之前的。对此的经验是,有太多的臃肿和配置来满足我的需求,并且有太多的东西需要了解以保持控制。

当我只需要处理一些 Http 以获得简单、快速且可扩展的异步 json 服务时,我更喜欢简单性并希望避免“框架开销”。所以我正在考虑这样的设置:

  • Linux 机器上的 Nginx Web 服务器,可在异步 json 服务之间进行负载平衡并将 Web 请求代理。
  • json 服务被编写为 Windows 服务,使用 HttpListener 对 Web 请求进行异步处理。

您对这个架构有何看法?

编辑:实际上我认为使用 fastcgi 从 nginx 到 Windows 服务而不是代理 http 请求会更有性能?你有什么想法?

c# .net nginx httplistener
2个回答
2
投票

只需实现一个ASHX - 基本上是一个适用于IIS的

IHttpHandler
,它的扩展性非常好,并且您描述的大多数问题都会“消失”...它使您可以完全控制整个请求/响应处理...一个很好的教程,请参阅 http://www.dotnetperls.com/ashx


0
投票

我的感觉是,配置一个简单的 Web 应用程序就足够了,该应用程序有一个返回相关 Json 响应的请求处理程序。

您可能想考虑优化 ASP .NET 管道。您可以在此处阅读有关此内容以及其他 ASP .NET 优化的更多信息。如果从处理的角度来看请求处理是轻量级的,您可能还需要提高线程限制。引用的文章中也对此进行了介绍。

从 Nginx 的角度来看,您可能需要检查工作线程的数量是否与您的 CPU 数量相匹配。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.