是否可以设置内容长度标头并使用分块传输编码?这样做是否解决了在使用chunked时不知道客户端响应长度的问题?
我正在考虑的情况是当你有一个大文件要传输时,确定它的大小没有问题,但它太大而无法完全缓冲.(如果你没有使用chunked,那么整个响应必须首先得到缓冲?对吗?)
谢谢.
根据本教程,可以使用Linux上的AIO轻松实现异步磁盘文件io,至少从编程/ api的角度来看.但是在本教程之前和之后,我已经阅读了很多帖子和文章,这些要么无法完成,要么应该使用带有补丁和其他许多问题的libevent.另一件事是我应该等待信号的循环,但基于本教程,我可以使用回调机制,这显然使AIO更容易使用.
现在,我不是一个Linux程序员甚至由一个长镜头我只是想找到一种简单的方式来支持Linux上的异步磁盘文件IO,学习它,并把它添加到一个异步磁盘IO库,我需要一个个人项目.目前我在非Windows平台上的Windows和io工作线程上使用重叠io.由于mutithreaded解决方案可能很棘手,我想在Linux上用AIO替换它.
那么,本教程中描述的AIO有什么问题?是性能吗?是否可以使用AIO对操作进行限制?
ps我不关心代码是否无法移植到其他POSIX兼容平台,只要它适用于主要的Linux发行版.而我所关心的只是常规磁盘文件io.
谢谢.
在我的基于Play框架的Web应用程序中,用户可以以csv或json格式下载不同数据库表的所有行.表格相对较大(100k +行),我试图使用Play 2.2中的分块来回传结果.
但问题是虽然println语句显示行被写入Chunks.Out对象,但它们不会显示在客户端!如果我限制发回的行将会起作用,但是如果我尝试发送所有行并导致超时或服务器内存不足,那么它在开始时也会有很大的延迟.
我使用Ebean ORM并且表被索引并且从psql查询不需要花费太多时间.有谁知道可能是什么问题?
我非常感谢你的帮助!
以下是其中一个控制器的代码:
@SecureSocial.UserAwareAction
public static Result showEpex() {
User user = getUser();
if(user == null || user.getRole() == null)
return ok(views.html.profile.render(user, Application.NOT_CONFIRMED_MSG));
DynamicForm form = DynamicForm.form().bindFromRequest();
final UserRequest req = UserRequest.getRequest(form);
if(req.getFormat().equalsIgnoreCase("html")) {
Page<EpexEntry> page = EpexEntry.page(req.getStart(), req.getFinish(), req.getPage());
return ok(views.html.epex.render(page, req));
}
// otherwise chunk result and send back
final ResultStreamer<EpexEntry> streamer = new ResultStreamer<EpexEntry>();
Chunks<String> chunks = new StringChunks() {
@Override
public void onReady(play.mvc.Results.Chunks.Out<String> out) {
Page<EpexEntry> page = EpexEntry.page(req.getStart(), req.getFinish(), 0); …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个与静态版本的librt链接的共享库.目前我这样做:
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
ADD_LIBRARY(memtrace SHARED memtrace.c)
ADD_LIBRARY(lib_real_time STATIC IMPORTED)
SET_TARGET_PROPERTIES(lib_real_time PROPERTIES IMPORTED_LOCATION /usr/lib/x86_64-linux-gnu/librt.a)
TARGET_LINK_LIBRARIES(memtrace lib_real_time)
Run Code Online (Sandbox Code Playgroud)
但我不想指定这样的路径.由于librt总是在标准路径中,我宁愿让cmake找到它.就像在gcc中一样,我只会指定-lrt.当我尝试使用此cmake文件执行此操作时:
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
ADD_LIBRARY(memtrace SHARED memtrace.c)
TARGET_LINK_LIBRARIES(memtrace rt)
Run Code Online (Sandbox Code Playgroud)
它将memtrace链接到librt的动态版本,这不是我想要的!
如何在不提及完整路径的情况下链接librt的静态版本?