如何检测来自控制器的websocket连接的打开

时间:2014-03-16 11:00:33

标签: dart angular-dart

我有一个控制器(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()
}

2 个答案:

答案 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);
}