dart的Websocket为什么找不到onOpen方法?

我主要使用的是JAVA,而JAVA使用Websocket时,Websocket一定会有个onOpen方法。

@ClientEndpoint
public class WebsocketListener {
    @OnOpen
    public void onOpen(Session session) throws IOException {

    }

    @OnMessage
    public void onMessage(ByteBuffer byteBuffer) {
       
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
       
    }

    @OnError
    public void onError(Session session, Throwable t) {
        
    }
}


我用的第三方Websocket框架也一定会有onOpen方法。
我就下意识的认为Websocket一定会有onOpen方法。
直到我遇到了dart。
我对dart不是很了解,函数的使用方法都是在网上搜的,所以很容易遇到一些简单的问题。

var socket = await WebSocket.connect(url);
//监听
socket.listen((data) {
 
}, onDone: () {
  print('WebSocket断开');
},onError: (e){
  print("服务异常:$e");
});

可以看到socket.listen函数并没有提供onOpen方法,我点进socket查看函数,确实没有onOpen的处理方法。
然后找了一个第三方框架,也是一样完全找不到…
后来我反应过来了…
我突然觉得我真的是个小丑…

dart的WebSocket.connect(url)函数本身就是异步的。
await 等待返回结果,就表示已经得到服务器响应了,后面只需要判断socket状态是不是open就可以了。

var socket = await WebSocket.connect(url);
if(socket.readyState == WebSocket.open){
	//监听
	socket.listen((data) {
	
	}, onDone: () {
	  print('WebSocket断开');
	},onError: (e){
	  print("服务异常:$e");
	});
}

如此简单的问题,我居然找了半天的open函数。


好了,又水了一篇。

你可能感兴趣的:(其他,websocket,java)