mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-14 08:50:53 +08:00
1.2 KiB
1.2 KiB
通过 http 协议上传文件
概述
本例子使用 acl 库的 HTTP 库及服务器框架编写,其中服务器模型采用 acl 中基于 IO 事件的线程池模型,该服务模型既可以编写出完全非阻塞服务(通常编写时需要注意一些细节),也可以编写完全阻塞服务或者半非阻塞服务。得益于 IO 事件引擎,当客户端连接空闲时,该连接不会占用任何线程,而是被置入 IO 事件集合中,只有当该连接有数据可读时,服务框架才会将一个线程与该连接绑定。
本示例是一个半非阻塞服务模型,阻塞的地方是当框架读取 HTTP 客户端请求时是阻塞的,而当读取 HTTP 客户端以 MIME 方式上传数据时是非阻塞的,这样做是有好处的,因为有可能用户上传的文件比较大,会耗费较长时间,如果使该客户端连接与一个线程长期绑定,则有可能会耗尽线程池中的线程资源。因为读 HTTP 数据体过程是非阻塞的,意味着当连接“暂时”没有数据时,连接便会与线程“解绑”而归还该线程至线程池中,当该连接又有新数据到达时便又会从线程池中选定一个线程处理该连接上传的数据。