首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ServiceStack如何处理并发调用?

ServiceStack如何处理并发调用?
EN

Stack Overflow用户
提问于 2013-01-09 23:29:50
回答 1查看 4K关注 0票数 16

ServiceStack如何处理并发调用?我正在寻找在WCF中ConcurrencyMode.Multiple的等价物。

我的WCF服务设置了此属性:

代码语言:javascript
复制
   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]

我需要在ServiceStack中启用任何东西才能让它为每个调用使用多个线程吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 00:12:31

ServiceStack没有针对每个AppHost的可配置并发模型,它取决于您选择用来托管ServiceStack服务的AppHost:

ASP.NET主机(AppHostBase)

对于ASP.NET web主机,ServiceStack 本身不会创建任何新的线程,请求只是在处理请求的同一个IIS/Nginx/etc ASP.NET WebWorker上处理。

HttpListener自托管(AppHostHttpListenerBase)

ServiceStack仅在您调用new AppHost().Start(url)时在启动上创建一个新线程。在运行时没有创建新线程,即在HttpListener异步回调线程上处理请求。

HttpListener长时间运行的自主机(AppHostHttpListenerLongRunningBase)

这是ServiceStack的另一个自托管HttpListener选项,它使用自己的托管ThreadPool在上执行请求(释放HttpListener异步回调线程)。ThreadPool的默认poolSize是500线程,尽管这可以在AppHostHttpListenerLongRunningBase(poolSize)构造函数中配置。

RedisMQ主机(RedisMqServer)

管理长时间运行的任务的一个很好的选择是将请求委托给Redis MQ Host,这是一个轻量级的MQ服务器,允许您在托管的后台线程中延迟和处理请求。默认情况下,RedisMqServer为每种消息类型(即请求)产生一个后台线程,尽管这在启动时是可配置的,例如:在下面的示例中,2个后台线程用于处理PostTwitter请求,而只有一个后台线程分别用于处理CallFacebookEmailMessage请求:

代码语言:javascript
复制
mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14238680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档