sockets - 如何将大文本数据从 tcp 套接字发送到 Flutter 应用程序?
问题描述
我有 3000 行和 20 列数据,大多数单元格有 50 或 80 个字符长的文本。我使用 aqueduct 和 Dart Server 进行测试,看看哪个是服务器数据和 Flutter 通信之间更好的中间选项。
我使用 2 选项进行测试。我只能测试 for (var data in _socket) 运行大约 10 或 12 次以接收整个数据。另一方面 _socket.liste 丢失了大部分数据。
在两者中,我什至都使用 await Future.delayed(Duration(seconds: 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;
}
}
解决方案
推荐阅读
- windows - 如何使用 Powershell 订阅 Windows ForwardedEvents 日志?
- r - `isoband` 包安装失败,`testthat.h` 未找到
- c - 指向c函数的指针?
- c# - 可为空的引用类型和构造函数警告
- huggingface-transformers - 如何解码来自 TFGPT2Model 的输出序列?
- r - 尝试在 R 中导入逗号分隔的数据
- perl - 如何从 TMDB 中找到电影的评分
- regex - 多行延迟匹配节点正则表达式
- awk - 如何使用 Sed/gedit 删除文件中“:”之后的所有内容并将输出写入另一个文件?
- r - 为什么 lm_robust() HC3 标准误差小于 coeftest() HC0 标准误差?