在ServiceStack website上列出的它表明,ServiceStack可以运行在Mono上,具有以下两种选项:
这些不同的配置是什么,哪些是Mono上的Web服务的首选配置?
发布于 2012-08-30 08:32:00
Linux更新
来自the v4.5.2 Release的ServiceStack现在支持Mono核心,该核心提供了来自共享跨平台代码库的.NET的显着性能和稳定性改进,并得到了资源丰富、积极和响应迅速的微软团队的支持。如果你目前在Mono上运行ServiceStack,我们强烈建议升级到.NET核心,以利用其卓越的性能,稳定性和其自上而下支持的技术堆栈。
Mono更新
我们推荐在Linux和Mono上托管ASP .NET站点的设置是使用nginx/HyperFastCgi。我们已经在mono-server-config上发布了从头开始创建Ubuntu的分步指南,以及部署/安装/配置/初始化脚本。
在注意到一些稳定性和性能问题后,我们不再推荐MonoFastCGI。这篇博文对different ASP.NET Hosting options in Mono的性能、内存使用和稳定性进行了很好的分析。
开发
XSP类似于VS.NET WebDev服务器-一个用C#编写的简单的独立ASP.NET服务器。这适用于开发或小型工作负载。您只需从您的ServiceStack ASP.NET主机的根目录运行它,这将使它在http://localhost:8080
上可用。
生产
对于外部internet服务,您通常希望将ServiceStack web服务作为功能齐全的Web服务器的一部分进行托管。Linux最流行的两个全功能web服务器是:
Nginx
使用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上运行。不过,如果您愿意,可以很容易地将应用程序守护到run as a Linux daemon as outlined here。wiki页面还包括配置您的自托管web服务以在Nginx或Apache反向代理后面运行的说明。
由于它非常适合Heroku的并发模型,因此在不久的将来,as detailed in their 12 factor app自托管将是我们希望提供更多支持的领域。
ServiceStack.net Nginx /单声道FastCGI配置
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 &
它托管使用XSP's WebApp File Format指定的/etc/rc.d/init.d/mono-fastcgi
文件夹中的*.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>
这将在后台运行Nginx Mono进程,您可以通过将以下规则添加到nginx.conf来连接FastCGI:
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;
}
它会将任何以/ServiceStack
或/RedisAdminUI
等开头的路由转发到FastCGI单声道服务器进程进行处理。一些示例应用程序以这种方式托管:
对于那些感兴趣的人,servicestack.net的完整Nginx + FastCGI配置文件是available for download。
发布于 2012-09-06 18:53:52
在生产中,我们将nginx与unix文件套接字一起使用
在nginx、服务堆栈和mono中使用套接字通信时,我们发现了一个bug/内存泄漏。这是在500个并发请求的情况下,虽然你会期望cpu和内存的峰值,但它再也不会停机了。我们没有做任何进一步的测试来找出问题所在,但xamarin bugzilla记录了一个似乎与我们遇到的问题相似的错误。基本上,我们尝试了以下方法,它对我们来说已经足够好了。
我们使用以下命令参数切换到使用unix套接字
套接字
tmp mono-server4/filename=/tmp/omething.socket /socket=unix /applications=/var/www/
这个方法的问题是,每次你运行fastcgi-mono-server4时套接字文件的权限都会改变,所以你必须在启动fastcgi-mono-server4之后纠正它们!另一个缺点是,在我们的机器上,它只能处理大约120个并发请求。然而,目前这对我们来说并不是什么问题,你可以随时生成更多的进程。
希望这能有所帮助
发布于 2014-09-28 12:23:49
免责声明:我是HyperFastCgi服务器的作者,在ceco的回答中提到了博客文章的作者
使用HyperFastCgi的nginx可以完成这项工作。HyperFastCgi不会像mono fastcgi服务器那样泄漏内存,而且执行速度更快,因为它使用低级mono API在应用程序域之间传递数据,而不是跨域调用的缓慢mono JIT实现。此外,它还可以选择使用原生libevent库进行套接字通信,这比当前的单声道System.Net.Sockets实现快了1.5-2倍。
HyperFastCgi的主要功能:
Managed Listener with Managed Transport
(只使用托管代码,异步System.Net.Sockets。单声道较慢,原因是即时跨域调用较慢) Managed Listener with Combined Transport
(使用异步System.Net.Sockets作为监听器,并使用低级的mono API进行跨域调用。许多faster)Native Listener
(使用本机libevent作为套接字库和低级mono API进行跨域调用。最佳性能)
Native Listener
的结合使得web服务器的工作方式类似于NodeJS
:所有请求都以异步方式在单线程中处理。https://stackoverflow.com/questions/12188356
复制相似问题