myt*_*thz 48 c# linux mono mod-fastcgi servicestack
在ServiceStack网站上列出,它表明ServiceStack可以在Mono上运行:
这些不同的配置是什么,哪些是Mono上的Web服务的首选?
myt*_*thz 83
从v4.5.2发布版 ServiceStack现在支持.NET Core,它提供了超越Mono的显着性能和稳定性改进,这些改进源自共享的跨平台代码库,并由Microsoft资源充足,活跃且响应迅速的团队提供支持.如果您当前在Mono上运行ServiceStack,我们强烈建议您升级到.NET Core,以利用其卓越的性能,稳定性和自上而下支持的技术堆栈.
我们在Linux和Mono上托管ASP .NET站点的推荐安装是使用nginx/HyperFastCgi.我们已经发布了一个循序渐进的指南,从头开始创建一个Ubuntu VM,并在mono-server-config上配置 deploy/install/conf/init脚本.
在注意到几个稳定性和性能问题后,我们不再推荐MonoFastCGI.此博客文章提供了对Mono中不同ASP.NET主机选项的性能,内存使用和稳定性的良好分析.
XSP类似于VS.NET WebDev服务器 - 一个用C#编写的简单独立ASP.NET WebServer.这适用于开发或小型工作负载.您只需从ServiceStack ASP.NET主机的根目录运行它,它将使其可用http://localhost:8080.
对于外部Internet服务,您通常希望将ServiceStack Web服务作为全功能Web服务器的一部分进行托管.Linux最受欢迎的两款全功能Web服务器是:
使用Mono FastCGI在Nginx中托管ServiceStack ASP.NET主机.
使用mod_mono在Apache HTTP Server中托管ServiceStack ASP.NET主机.
ServiceStack还支持自托管,允许您在独立的控制台应用程序(即没有Web服务器)中独立运行ServiceStack Web服务.当您不需要功能齐全的Web服务器(例如:您只需要在Intranet内部托管Web服务)时,这是一个好主意.
默认情况下,相同的ServiceStack控制台应用程序二进制文件在Windows/.NET和Mono/Linux上都按原样运行.虽然如果您愿意,您可以轻松地将应用程序守护程序作为Linux守护程序运行,如此处所述.Wiki页面还包含有关将自托管Web服务配置为在Nginx或Apache反向代理后运行的说明.
由于它非常适合Heroku的并发模型,因为他们的12因素应用程序中将详细介绍自托管将是一个我们希望在不久的将来提供更多支持的领域.
servicestack.net网站本身(包括所有现场演示)使用Nginx + Mono FastCGI 在Ubuntu hetzner vServer上运行.
此命令用于启动FastCGI后台进程:
fastcgi-mono-server4 --appconfigdir /etc/rc.d/init.d/mono-fastcgi
/socket=tcp:127.0.0.1:9000 /logfile=/var/log/mono/fastcgi.log &
Run Code Online (Sandbox Code Playgroud)
其中托管/etc/rc.d/init.d/mono-fastcgi使用XSP的WebApp文件格式指定的文件夹中*.webapp文件中定义的所有应用程序,例如:
ServiceStack.webapp:
<apps>
<web-application>
<name>ServiceStack.Northwind</name>
<vhost>*</vhost>
<vport>80</vport>
<vpath>/ServiceStack.Northwind</vpath>
<path>/home/mythz/src/ServiceStack.Northwind</path>
</web-application>
</apps>
Run Code Online (Sandbox Code Playgroud)
这将在后台运行FastCGI Mono进程,您可以通过将此规则添加到nginx.conf来获取Nginx连接:
location ~ /(ServiceStack|RedisAdminUI|RedisStackOverflow|RestFiles)\.* {
root /usr/share/nginx/mono/servicestack.net/;
index index.html index.htm index.aspx default.htm Default.htm;
fastcgi_index /default.htm;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/servicestack.net$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)
这会将以/ServiceStack或/RedisAdminUI等开头的任何路由转发到FastCGI单声道服务器进程进行处理.一些示例应用程序托管方式:
对于那些感兴趣的人,可以下载 servicestack.net的完整Nginx + FastCGI配置文件.
Ant*_*yer 19
在生产中我们使用nginx和unix文件套接字
我们在使用与nginx,服务堆栈和单声道的套接字通信时发现了一个错误/内存泄漏.这是500个并发请求,而你期望cpu和内存的峰值再也没有回来.我们没有做任何进一步的测试来发现问题所在,但是xamarin bugzilla记录的错误与我们遇到的问题类似.基本上我们尝试了以下内容,这对我们来说已经足够了.
我们切换到使用带有以下命令参数的unix套接字
fastcgi-mono-server4 /filename=/tmp/something.socket/socket = unix/applications =/var/www /
我们使用此方法遇到的问题是每次运行fastcgi-mono-server4时套接字文件的权限都会更改,因此您必须在启动fastcgi-mono-server4后更正它们!另一个缺点是在我们的盒子上它只能处理大约120个并发请求.然而,这对我们来说并不是一个真正的问题,你总能产生更多的进程.
希望这可以帮助
免责声明:我是HyperFastCgi服务器的作者,在ceco的回答中提到了博客文章的作者
使用HyperFastCgi的 nginx可以完成这项工作.HyperFastCgi不会像单声道fastcgi服务器一样泄漏内存并且执行速度更快,因为它使用低级单声道API在应用程序域之间传递数据,而不是跨域调用的慢速单声道JIT实现.此外,它还可以选择使用本机libevent库进行套接字通信,这比当前单声道System.Net.Sockets实现快约1.5-2.
HyperFastCgi的主要功能:
Managed Listener with Managed Transport (仅使用托管代码,异步System.Net.Sockets.单声道速度慢,因为JIT跨域调用缓慢) Managed Listener with Combined Transport (使用异步System.Net.Sockets作为侦听器,使用低级单声道API进行跨域调用.快得多)Native Listener(使用native libevent作为套接字库和低级单声道API来进行跨域调用.性能最佳) Native Listener使得Web服务器的工作方式如下NodeJS:所有请求都以异步方式在单个线程中处理.