1

我正在寻找一种方法来处理基于 ServiceStack 框架的服务中的非阻塞请求。所以我看到有 AppHostHttpListenerLongRunningBase 类(我现在需要一个自托管的应用程序)但是没有任何很好的例子如何使用这个类。

让我们看一个简单的例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

using ServiceStack.ServiceHost;
using ServiceStack.ServiceInterface;
using ServiceStack.WebHost.Endpoints;


public class Hello
{
    public String Name { get; set; }
}

public class HelloResponse
{
    public String Result { get; set; }
}

public class HelloService : Service
{
    public Object Any(Hello request)
    {
        //Emulate a long operation
        Thread.Sleep(10000);
        return new HelloResponse { Result = "Message from " + request.Name };
    }
}

public class HelloAppHost : AppHostHttpListenerLongRunningBase 
{
    public HelloAppHost()
        : base("Hello App Services", typeof(HelloService).Assembly)
    {
    }

    public override void Configure(Funq.Container container)
    {
        Routes
            .Add<Hello>("/hello")
            .Add<Hello>("/hello/{Name}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var appHost = new HelloAppHost();
        appHost.Init();
        appHost.Start("http://127.0.0.1:8080/");
        Console.ReadLine();
    }
}

因此,如果我运行应用程序并发出两个请求,它们将以串行模式执行,并且响应之间会有大约 10 秒的延迟。那么有没有办法执行非阻塞请求(如果有自托管应用程序解决方案会更好)。

PS:我知道有一个基于 Redis 的解决方案,但由于某些原因它不适合。

4

1 回答 1

1

thread.sleep 是导致 10 秒延迟的原因。Web 服务不一定是多线程应用程序。我发现通过缓存常见的响应来使响应非常快,并且您不应该等待与当前线程睡眠时间一样长的等待时间。

于 2013-06-07T02:49:55.363 回答