Is er een volwassen, Mono-compatibele FastCGI-bibliotheek?

Ik zou graag een permanente applicatieserver opzetten die op Mono draait en die webverzoeken moet kunnen accepteren en een geschikt antwoord kan retourneren. Het is een eenvoudige taak, en vrijwel waar FastCGI voor is, maar het lijkt erop dat ik geen FastCGI-oplossing vind die niet is gelijmd met ASP.NET.

Om extra duidelijk te zijn: ik ben niet geïnteresseerd in ASP.NET en wil het niet gebruiken of een deel van de ASP.NET-stack coöpteren. Alles wat ik echt nodig heb, is een manier om via FastCGI met een webserver te communiceren en ik kan de rest achterhalen.

3

2 antwoord

Hoewel de implementatie van Mono FastCGI altijd is verpakt met een ASP.NET-server, heb ik de code zo geschreven dat deze kan worden gebruikt met elke serverimplementatie. Hier is een eenvoudig voorbeeld dat zou moeten werken. De code van uw aanvraag gaat in de methode Verwerken en u hebt toegang tot FastCGI-omgevingsvariabelen via ResponderRequest.GetParameter .

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);
    }
}

Om dit voorbeeld te bouwen, kunt u alle CS-bestanden downloaden van https: //github.com/mono/xsp/tree/master/src/Mono.WebServer.FastCgi en sluit alle bestanden uit die niet de naamruimte Mono.FastCgi gebruiken.

2
toegevoegd
Brian, bedankt voor je geweldige werk hieraan! Ik heb een gerelateerde SO-vraag over het hosten van een mono-app die afhankelijk is van statische variabelen en ik zou het zeer op prijs stellen als je tijd had om je te bezinnen op de vraag: stackoverflow.com/questions/13480328/&ellicle ;
toegevoegd de auteur Glenn, de bron

Misschien koppelt u de FASTCGI C-bibliotheek aan Mono.

Een andere mogelijkheid zou kunnen zijn om het SCGI -protocol te gebruiken. Dat protocol (op een of andere manier minder efficiënt dan FastCGI) deelt met FastCGI de mogelijkheid om een ​​permanente toepassing voor een webserver te laten werken. Maar SCGI is zo eenvoudig dat het schrijven van je eigen SCGI-protocolimplementatie heel eenvoudig is (ervan uitgaande dat je werkervaring hebt met HTTP).

0
toegevoegd
Omdat er geen goede FastCGI .NET-bibliotheken lijken, geef ik SimpleCGI een kans en markeer ik dit antwoord als geaccepteerd. Proost.
toegevoegd de auteur pjohansson, de bron