Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart Web服务器:防止崩溃_Dart_Dart Isolates - Fatal编程技术网

Dart Web服务器:防止崩溃

Dart Web服务器:防止崩溃,dart,dart-isolates,Dart,Dart Isolates,我想使用dart开发一个web服务+web套接字服务器,但问题是我无法确保服务器的高可用性,因为隔离中存在未修补的异常 当然,我已经尝试捕捉我的主要功能,但这还不够 如果在未来的then()部分发生异常,服务器将崩溃 这意味着一个有缺陷的请求可能会导致服务器停机 我意识到这是一个问题,但是有没有办法在不破坏VM的情况下对任何崩溃进行备份,以便服务器可以继续服务其他请求 谢谢。我过去所做的是使用主隔离启动一个子隔离,它承载实际的web服务器。启动隔离时,可以将“未捕获异常”处理程序传递给子隔离(我

我想使用dart开发一个web服务+web套接字服务器,但问题是我无法确保服务器的高可用性,因为隔离中存在未修补的异常

当然,我已经尝试捕捉我的主要功能,但这还不够

如果在未来的then()部分发生异常,服务器将崩溃

这意味着一个有缺陷的请求可能会导致服务器停机

我意识到这是一个问题,但是有没有办法在不破坏VM的情况下对任何崩溃进行备份,以便服务器可以继续服务其他请求


谢谢。

我过去所做的是使用主隔离启动一个子隔离,它承载实际的web服务器。启动隔离时,可以将“未捕获异常”处理程序传递给子隔离(我还认为您应该能够在顶层注册一个处理程序,以防止出现此特定问题,如原始问题中的问题所述)

例如:

导入“省道:隔离”;
void main(){
//产生一个子隔离体
spawnFunction(isolateMain、uncaughtExceptionHandler);
}
void isolateMain(){
//这是你应用程序的“真正”入口点
//设置http服务器和侦听等。。。
}
布尔未捕获异常处理程序(ex){
//TODO:添加日志记录!
//重生一个新的孩子。
生成函数(isolateMain、uncaughtException);
return true;//我们已经处理了未捕获的异常
}

Chris Buckett为您提供了一种在服务器出现故障时重新启动服务器的好方法。但是,您仍然不希望服务器停机

try-catch
仅适用于同步代码

doSomething(){
试一试{
someSynchronousFunc();
someAsyncFunc()。然后(()=>print('foo');
}捕获(e){
// ...
}
}
当异步方法完成或失败时,它会在程序使用
doSomething
方法完成后“长时间”发生

编写异步代码时,通常最好通过返回future来启动方法:

Future doSomething(){
返回新的未来(){
//你的代码在这里。
var a=b+5;//抛出并被捕获。
return someAsyncCall();//如果直接返回Future,则会转发错误。
});
}
这确保了如果您有抛出的代码,它将捕获它们,然后调用方可以
catchError()
它们

如果以这种方式编写,那么崩溃会少很多,前提是至少在顶层有一些错误处理

无论何时调用返回未来的方法,都可以直接返回它(如上图所示)或为它返回
catchError()
,以便在本地处理可能的错误


主页上有你应该阅读的内容。

如果我可以让uncaughtExceptionHandler工作,那就太好了,但不知何故我不能。