2013-01-24 95 views
1

我尝试使用dart:io包中的WebSocket class连接到SSL WebSocket服务。这似乎并不奏效。目前不支持wss://协议还是我错过了一些东西。这里所使用的代码:使用dart:io使用wss://协议(SSL)的WebSocket

var ws = new WebSocket('wss://...'); 

ws.onopen =() { 
    print('open'); 
}; 

ws.onmessage = (e) { 
    print(e.data); 
}; 

我也试过替代API:

var client = new HttpClient(), 
    conn = new WebSocketClientConnection(client.getUrl(new Uri.fromString('https://...'))); 

    conn.onMessage = (msg) { 
     print(msg); 
    }; 

    conn.onOpen =() { 
     print('open'); 
    }; 

这似乎没有任何工作,我得到这样的错误:

1006 HttpParserException:在完全响应之前连接已关闭 收到标头1006 HttpParserException:无效的请求方法

我正在使用最新的SDK。

回答

1

我假设你是Dart的最新版本。如果你不是,我会建议更新。

一些您所呼叫的方法 - conn.onMessage()conn.onOpen()返回Stream对象,你需要使用一个.listen()访问(“听”)流。下面是语法:

import 'dart:html'; 

void main() { 
    var wss = new WebSocket('wss://echo.websocket.org'); 
    wss.onOpen.listen((item) { 
    wss.send("hello world"); 
    }); 

    wss.onMessage.listen((message) { 
    print(message.data); 
    }); 
} 

你能试试吗?有关更多详细信息,请参阅api文档中的StreamWebsocket

+0

我想在服务器端使用websocket(即DartVM)。无论如何,第二个选择实际上在最新的SDK中起作用。 – gmosx

+0

太好了。随着M3的改变,情况发生了很大变化。你的'onOpen'和'onMessage'也应该以我上面演示的方式工作。 –

0

其实,第二个选择在最新的SDK中工作。问题是我连接到一个Socket.io服务,而我没有执行HTTP握手。