web_socket_io 0.0.4 icon indicating copy to clipboard operation
web_socket_io: ^0.0.4 copied to clipboard

WebSocket implement based on dart。Used to canary client sdk.My purpose is to learn dart syntax and development process。

基于dart简单实现WebSocket。

WebSocket协议 #

请求握手

Sec-WebSocket-Key = toBase64(16字节随机数)

GET / HTTP/1.1
Host: 127.0.0.1:10086
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: k8ZJD7PN3mwawWDsd9V1OA==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

握手响应

Sec-WebSocket-Accept = toBase64( sha1( Sec-WebSocket-Key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" ) )

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: WhwAE9ive8GXOhTDu6RlEunn4C0=

如何发布 #

dart pub publish --server=https://pub.dartlang.org

如何使用 #

服务端 #

class ServerDemo {
  final WebSocketServer _server = WebSocketServer();
  ServerDemo() {
    _server.onMessage = (event) {
      print(Utf8Decoder().convert(event.toList()));
    };
  }
  void play() {
    _server.bind('127.0.0.1', 10086);
  }

  void stop() {
    _server.close();
  }
}

客户端 #

class ClientDemo extends WebSocketProvider {
  late WebSocketClient _client;
  ClientDemo() {
    _client = WebSocketClient('ws://127.0.0.1:10086',
        provider: this, pingInterval: const Duration(seconds: 5));
    _client.connect();
  }

  void send(bool text) {
    if (text) {
      _client.send(OpCode.text, Uint8List.fromList('文本测试消息'.codeUnits));
    } else {
      _client.send(
          text ? OpCode.text : OpCode.binary, Utf8Encoder().convert('二进制测试消息'));
    }
  }

  @override
  void onClosed(CloseCode code) {
    print('onClosed: $code');
  }

  @override
  void onConnected(WebSocketChannel webSocket) {
    print('onConnected');
  }

  @override
  void onText(String message, WebSocketChannel webSocket) {
    print('onText: $message');
  }

  @override
  void onMessage(Uint8List message, WebSocketChannel webSocket) {
    print('onMessage: ${String.fromCharCodes(message)}');
  }

  @override
  void onPing(Uint8List data, WebSocketChannel webSocket) {
    print('onPing');
  }

  @override
  void onPong(Uint8List data, WebSocketChannel webSocket) {
    print('onPong');
  }
}

TODO #

  • Ping、Pong
1
likes
115
pub points
40%
popularity

Publisher

verified publisher iconpub.wildlotus.shop

WebSocket implement based on dart。Used to canary client sdk.My purpose is to learn dart syntax and development process。

Repository (GitHub)

Documentation

API reference

License

Icon for licenses.MIT (LICENSE)

Dependencies

crypto, flutter

More

Packages that depend on web_socket_io