关于使用Nginx代理webbrequest到基于.net HttpListener的Json服务的想法
本文关键字:HttpListener Json 服务 net Nginx 于使用 代理 webbrequest | 更新日期: 2023-09-27 18:13:42
我正在做一个webservice,只需要服务json,它需要可扩展。
我得到的印象是Nginx是一个比IIS 7.5更具可扩展性的web服务器,与IIS相比,它非常容易管理。此外,Nginx可以很容易地使用上游模块在几个json服务之间进行负载平衡。
因为我只需要服务json,我觉得ASP。Net和IIS太过分了。我只需要一些非常简单的路由和一个简单的authcookie机制,我可以很容易地自己编写。
现在我正在使用MVC3,但感觉它是臃肿的,当我只服务Json,我非常恼火的事实,我不得不编写自定义认证属性,使默认拒绝策略,不得不做一个HttpModule hack around windowsfrom的身份验证的默认重定向未经授权的请求,一般需要阅读和学习很多,以保持在框架的控制。我也考虑过WCF,但我的前任。这方面的经验是,有太多的膨胀和配置,以满足我的需求,有太多的东西要知道,以保持控制。
我更喜欢简单,当我只需要处理一些简单,快速和可扩展的异步json服务的Http时,我想避免"框架开销"。所以我正在考虑这样的设置:
- 一个linux系统上的Nginx web服务器,它在异步json服务之间进行负载平衡并代理web请求。
- json服务被编写为Windows服务,使用HttpListener对web请求进行异步处理。
你对这个架构有什么想法?
编辑:实际上我认为这将是更高性能使用fastcgi从nginx到windows服务,而不是代理http请求?你是怎么想的?
只要实现一个ASHX -基本上是IIS的IHttpHandler
,它可以很好地扩展,你描述的大多数问题只是"消失"…它使您可以完全控制整个请求/响应处理…要获得一个很好的教程,请参见http://www.dotnetperls.com/ashx
我的感觉是,配置一个简单的web应用程序,有一个返回相关Json响应的请求处理程序就足够了。
你可能想看看如何优化asp.net管道。你可以在这里阅读更多关于这个和其他asp.net优化的内容。如果从处理的角度来看,请求处理是轻量级的,那么您可能还需要提高线程限制。这在参考的文章中也有涉及。
从Nginx的角度来看,你可能想要检查工作线程的数量是否匹配你的CPU计数。