У меня есть система, которая должна записывать строки в поток ответов HTTP. Каждая строка в этой системе представляет какое-то событие, поэтому вы можете видеть это как поток уведомлений. Я использую .NET4 в Windows 7, используя самостоятельный хостинг NancyFX и Nancy (0.23). Следующий код является функциональным:
using System;
using System.IO;
using System.Threading;
using Nancy;
using Nancy.Hosting.Self;
namespace TestNancy
{
public class ChunkedResponse : Response
{
public ChunkedResponse()
{
ContentType = "text/html; charset=utf-8";
Contents = stream =>
{
using (var streamWriter = new StreamWriter(stream))
{
while (true)
{
streamWriter.WriteLine("Hello");
streamWriter.Flush();
Thread.Sleep(1000);
}
}
};
}
}
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = args => new ChunkedResponse();
}
}
public class Program
{
public static void Main()
{
using (var host = new NancyHost(new Uri("http://localhost:1234")))
{
host.Start();
Console.ReadLine();
}
}
}
}
Теперь я хочу добавить сжатие к потоку, чтобы уменьшить пропускную способность. Почему-то при тестировании в браузере я не вижу вообще никакого результата. Я перепробовал много комбинаций для достижения желаемого результата, но вот что у меня есть на данный момент:
using System; using System.IO; using System.IO.Compression; using System.Threading; using Nancy; using Nancy.Hosting.Self;
namespace TestNancy {
public class ChunkedResponse : Response
{
public ChunkedResponse()
{
Headers["Content-Encoding"] = "gzip";
ContentType = "text/html; charset=utf-8";
Contents = stream =>
{
using (var gzip = new GZipStream(stream, CompressionMode.Compress))
using (var streamWriter = new StreamWriter(gzip))
{
while (true)
{
streamWriter.WriteLine("Hello");
streamWriter.Flush();
Thread.Sleep(1000);
}
}
};
}
}
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = args => new ChunkedResponse();
}
}
public class Program
{
public static void Main()
{
using (var host = new NancyHost(new Uri("http://localhost:1234")))
{
host.Start();
Console.ReadLine();
}
}
} }
Я ищу помощь, которая либо говорит мне, что я делаю неправильно в отношении протокола HTTP (например, я пытался добавить длину фрагмента, как описано в HTTP1.1, что не сработало), либо помощь относительно Нэнси, где она делает что-то, чего я не учитывал. для.