如何ServiceStack处理并发呼叫?(How does ServiceStack handle

2019-07-18 00:47发布

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

我的WCF服务已将此属性设置:

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]

我需要能够在任何ServiceStack得到它使用多个线程每个呼叫?

Answer 1:

ServiceStack没有每一个APPHOST配置并发模型,它是取决于您选择与托管您ServiceStack服务APPHOST:

ASP.NET主机(AppHostBase)

对于ASP.NET Web主机,ServiceStack 不会产生任何新的线程本身的要求只是在同一个IIS处理/ Nginx的/ ASP.NET等HTTP WebWorker处理该请求。

HttpListener自主机(AppHostHttpListenerBase)

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

HttpListener长时间运行的自托管(AppHostHttpListenerLongRunningBase)

这又是一个自我主机HttpListener选项ServiceStack使用它自己的管理线程池来执行的(免费-ING了HttpListener异步回调线程)的请求。 线程池的默认poolSize为500线,虽然这是在配置AppHostHttpListenerLongRunningBase(poolSize)构造函数。

RedisMQ主机(RedisMqServer)

管理长时间运行的任务一个很好的选择是委托请求到Redis的MQ主机这是一种重量轻,MQ服务器允许您推迟和管理后台线程处理请求。 默认情况下,RedisMqServer派生每个消息类型(即请求)的单个后台线程,虽然这是在启动时,例如,可配置的:在低于2个后台线程的示例中用于处理PostTwitter请求,而只有1后台线程的每个是用于处理CallFacebookEmailMessage请求:

mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);


文章来源: How does ServiceStack handle concurrent calls?