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