Как отправить большие текстовые данные из tcp-сокета в приложение Flutter? - PullRequest
0 голосов
/ 03 февраля 2019

У меня 3000 строк и 20 столбцов данных, большинство ячеек имеет текст длиной 50 или 80 символов.Я тестирую, используя aqueduct и Dart Server, чтобы увидеть, какой из них лучше промежуточный вариант между данными сервера и обменом данными Flutter.

Я использую 2 варианта для теста.Все, что я могу проверить, это то, что for (var data в _socket) работает около 10 или 12 раз для получения целых данных.С другой стороны, _socket.liste потерял большую часть данных.

В обоих я даже использую await Future.delayed (Продолжительность (секунд: 7)) ... И результат был один и тот же.Короче говоря, они оба очень быстрые.но для больших данных у меня проблема с получением правильного результата.

Как отправить большие текстовые данные из сокета tcp в приложение Flutter?

  // OPTION 1
  _socket.listen((List<int> data) {
    String _reply = new String.fromCharCodes(data).trim();
    _reply = "$_reply$_tmpValue";
  });


 // OPTION 2
 await for (var data in _socket) {
    String _reply = new String.fromCharCodes(data).trim();
    _reply = "$_reply$_tmpValue";
  }

ОБНОВЛЕНИЕ:

  final Socket client = await Socket.connect('192.168.22.120', 3000);
  client.add(utf8.encode('$_requestedData\r\n'));

  client.listen(
          (var data) {
        var ints = new Uint8List.fromList(data).buffer.asInt64List();
        ints.forEach((i) => print('Got $i'));
      },
      onDone: () { print('Done'); client.close(); },
      onError: (e) { print('Got error $e'); client.close(); });

  print('main done');

РЕЗУЛЬТАТ основное сделано _reply: получено 4206144564389427761 получено 6861850004482897203 получено 2368148215793798714

ОБНОВЛЕНИЕ (рабочий раствор):

_socket = await Socket.connect('127.0.0.1’, 3000);
_socket.write(_myQuery);


await for (var data in _socket) {
  _reply = new String.fromCharCodes(data);
  _rawValue = _rawValue + _reply;

  int dataLen;
  dataLen = _reply.length;

  int carriageReturnPosition;
  carriageReturnPosition = dataLen - 2;

  int newLinePosition;
  newLinePosition = dataLen - 1;


  // In my scenario it loops 32 times and it takes about 145 seconds to get big data
  if (_reply.substring(carriageReturnPosition, newLinePosition) == '\r' &&
      _reply.substring(newLinePosition, dataLen) == '\n') {
    await _socket.close();
    _returnData = _reply;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...