path("foo" ~ Slash.?) {
complete(HttpEntity(ContentTypes.`application/octet-stream`, ByteString(Files.readAllBytes(Paths.get("foo")))))
}
说foo
是一个1GB的文件。我在响应的watchTermination
周围添加了一个Flow
,但是在发送响应之前我得到了通知,但实际上,我希望在完整响应后得到通知。响应已发送给客户。
进一步的调查显示watchTermination
建立在GraphStage
的基础上,onUpstreamFinish
仅支持onDownstreamFinish
,只有在出现异常时才调用JNIEXPORT jstring JNICALL Java_nativ_com_nativejnitest_MainActivity_functionname(JNIEnv *env, jobject object, jobjectArray stringArray){
jsize size = (*env)->GetArrayLength(env, stringArray);
char **argv = (char **)malloc(size);
for (int i=0; i < size; ++i)
{
jstring javaString = (jstring) (*env)->GetObjectArrayElement(env, stringArray, i);
const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);
argv[i] = strdup(nativeString);
(*env)->ReleaseStringUTFChars(env, javaString, nativeString);
(*env)->DeleteLocalRef(env, javaString);
}
// Sample Response
char *msgOut;
asprintf(&msgOut, "Response is %d ", size);
return (*env)->NewStringUTF(env, msgOut);
。参见GraphStages.scala#L128
这是我完整代码的仓库:https://github.com/ssgao/akka-http-quickstart-scala/tree/master/src/main/scala/com/example