是否有成熟的Mono兼容FastCGI库?

时间:2011-10-27 13:25:09

标签: .net mono fastcgi

我想在Mono上运行一个持久的应用服务器,它需要能够接受Web请求并返回一些合适的响应。这是一个简单的任务,几乎就是FastCGI的用途,但我似乎无法找到一个没有与ASP.NET结合在一起的FastCGI解决方案。

更清楚:我对ASP.NET不感兴趣,不想使用它或尝试共同选择ASP.NET堆栈的任何部分。我真正需要的只是通过FastCGI与网络服务器连接的方法,我可以弄清楚其余部分。

2 个答案:

答案 0 :(得分:2)

虽然Mono FastCGI实现始终与ASP.NET服务器打包在一起,但我编写的代码使得它可以与任何类型的服务器实现一起使用。这是一个应该工作的基本示例。您的特定于请求的代码采用Process方法,您可以通过ResponderRequest.GetParameter访问FastCGI环境变量。

using Mono.FastCgi;

public class MyResponder : IResponder {

    RequestResponder req;

    public MyResponder(RequestResponder req) {
        req = request;
    }

    public int Process() {
        req.SendOutput("Content-Type: text/plain\r\n\r\n");
        req.SendOutput("Server name: ");
        req.SendOutput(req.GetParameter("SERVER_NAME");
        return 0;
    }

    public ResponderRequest Request {
        get {return req;}
    }


    public static void Main() {
        Socket socket = SocketFactory.CreatePipeSocket(IntPtr.Zero);
        //            = SocketFactory.CreateTcpSocket(address, port);
        //            = SocketFactory.CreateUnixSocket(path);

        Server server = new Server(socket);

        server.SetResponder(typeof (MyResponder));
        server.Start(false);
    }
}

要构建此示例,您可以从https://github.com/mono/xsp/tree/master/src/Mono.WebServer.FastCgi下载所有CS文件,并排除任何不使用Mono.FastCgi命名空间的文件。

答案 1 :(得分:0)

也许您可以将FASTCGI C库与Mono接口。

另一种可能性是使用SCGI协议。该协议(以某种方式效率低于FastCGI)与FastCGI共享使持久应用程序可用于Web服务器的能力。但SCGI非常简单,编写自己的SCGI协议实现非常简单(假设您具有HTTP的工作知识)。