转:通过 Web IM 传文件

通过Web IM传文件的这篇文章思路非常好,先保存下来,待我整理思路并开发出来代码后,供各位朋友一起鉴赏。
======================================================================
Pushlets 实现了。保暖思淫欲, 现在我们要通过 Web IM 给其他用户传文件了。
这在我最新的框架 Eurasia3 中是非常容易的一件事情, 这里简单地描述一下原理。
当用户点击 "发送文件时", RIA 客户端在浏览器上生成一个上传文件的 "<Form>", 让用户选择上传的文件,
这样服务器就得到一个普通的文件上传请求, 通常的 CGI 会把文件保存在磁盘上以实现传统的上传功能。
但是这里, 我们并不把上传的文件放到磁盘上, 而是在内存中开出一个缓冲区,
当用户上传的内容达到缓冲区空间上限, 他的上行 IO 就阻塞了, 等待缓冲区重新可写。
与此同时, 服务器向接收文件的目标用户发送一个下载指令, 使他打开一个下载链接,
下载的内容即是从上传缓冲区中读取的, 当缓冲区读空, 用户的下行 IO 就阻塞了, 等待上传用户补充缓冲区。
这两者是同时进行的, 形成了一个生产消费模型。
其结果是, 服务器上并没有真实存在过这个文件, 它只要提供一个几百 K 的缓冲区就可以代理一次 Web IM 的文件传输请求。

出处:

http://eishn.blog.163.com/blog/static/6523182007290112332/

原文地址:https://www.cnblogs.com/csharpsharper/p/1240407.html