3

我有基于 HttpListener 的小型本地 Web 服务器。服务器向本地客户端应用程序提供文件,解包并将文件写入

response.OutputStream;

但有时文件(视频)很大,我认为总是将所有文件字节复制到输出流(内存)不是一个好主意。我想将服务文件流连接到响应输出流,如下所示:

response.OutputStream = myFileStream;

但是 -ok-response.OutputStream是只读的,所以我只能写入字节 - 有没有办法进行某种部分写入(流式传输)?

问候。

4

1 回答 1

2

您将需要创建一个线程并将数据流式传输以进行响应。使用这样的东西:

在你的主线程中:

while (Listening)
{
    // wait for next incoming request
    var result = listener.BeginGetContext(ListenerCallback, listener);
    result.AsyncWaitHandle.WaitOne();
}

在你班上的某个地方:

public static void ListenerCallback(IAsyncResult result)
{
    var listenerClosure = (HttpListener)result.AsyncState;
    var contextClosure = listenerClosure.EndGetContext(result);

    // do not process request on the dispatcher thread, schedule it on ThreadPool
    // otherwise you will prevent other incoming requests from being dispatched
    ThreadPool.QueueUserWorkItem(
        ctx =>
        {
            var response = (HttpListenerResponse)ctx;

            using (var stream = ... )
            {
                stream.CopyTo(response.ResponseStream);
            }

            response.Close();
        }, contextClosure.Response);
}
于 2013-11-08T21:24:43.380 回答