我想在Mono上运行一个持久的应用服务器,它需要能够接受Web请求并返回一些合适的响应。这是一个简单的任务,几乎就是FastCGI的用途,但我似乎无法找到一个没有与ASP.NET结合在一起的FastCGI解决方案。
更清楚:我对ASP.NET不感兴趣,不想使用它或尝试共同选择ASP.NET堆栈的任何部分。我真正需要的只是通过FastCGI与网络服务器连接的方法,我可以弄清楚其余部分。
答案 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的工作知识)。