我有一个控制器(MyController),它在初始化时从websocket连接(wsService)请求数据。
检测并等待websocket连接打开然后从控制器发出请求的最佳方法是什么?
现在我使用以下解决方案:
my_controller.dart:
MyController(wsService ws){
// when refresh() in wsService is called,
// the call is redirected to MyController's load()
ws.refresh = load;
}
load(){
ws.send(request);
}
ws_service.dart:
onConnect(){ //this is called when websocket connection is opened
refresh(); //this calls MyController's load()
}
答案 0 :(得分:2)
我仍然认为你应该做这样的事情,而不是让Angular轮询状态。
MyController(wsService ws){
if(ws.readyState == WebSocket.OPEN) {
load();
} else {
ws.onOpen.first.then((_) => load());
}
}
load(){
ws.send(request);
}
答案 1 :(得分:0)
此解决方案仍在使用轮询,但使用此解决方案,websocket连接的处理保存在一个位置(wsService
),并且函数调用中没有重复项。
MyController(wsService ws){
new Timer.periodic(new Duration(milliseconds: 100), (t){
if(ws.webSocket.readyState == WebSocket.OPEN) {
t.cancel();
load();
}
});
}
load(){
ws.send(request);
}