Flutter - Dart Socket 读取一半消息
Flutter - Dart Socket reads half message
我正在开发一个 Flutter 应用程序,它从 Scala 服务器接收 JSON 格式的数据。
一切正常,但有时我收到一条不完整的消息。
我正在使用 Streambuilder 来处理这个过程,代码如下:
return StreamBuilder(
stream: Utils.socket,
builder: (_, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
body: Center(
child: AdaptiveSpinner(
withMessage: 'Connecting to game server',
),
),
);
}
if (snapshot.error != null) {
return NetworkErrorScreen();
}
final message = String.fromCharCodes(snapshot.data);
[...]
);
在正常情况下,String.fromCharCodes(snapshot.data);
会给我一个有效的 JSON,然后我会对其进行解析,等等...但有时 json 不完整(套接字只读取它的一部分,从头开始直到一个未定义的点,或者从一个未定义的点开始到同一个json).
的结尾
关于如何解决这个问题有什么想法吗?可能与缓冲区大小问题有关?请帮忙!
我们终于设法解决了这个问题。
我们不知道为什么,但由于服务器返回格式正确的 json(带有换行符和制表符),这有时会导致问题出现错误。
一旦我们没有在服务器中格式化 json,将其作为纯字符串返回,错误就自行消失了......
这对我来说是一个谜,如果有人有解释,答案被广泛接受为正确答案。谢谢!
我正在开发一个 Flutter 应用程序,它从 Scala 服务器接收 JSON 格式的数据。
一切正常,但有时我收到一条不完整的消息。
我正在使用 Streambuilder 来处理这个过程,代码如下:
return StreamBuilder(
stream: Utils.socket,
builder: (_, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
body: Center(
child: AdaptiveSpinner(
withMessage: 'Connecting to game server',
),
),
);
}
if (snapshot.error != null) {
return NetworkErrorScreen();
}
final message = String.fromCharCodes(snapshot.data);
[...]
);
在正常情况下,String.fromCharCodes(snapshot.data);
会给我一个有效的 JSON,然后我会对其进行解析,等等...但有时 json 不完整(套接字只读取它的一部分,从头开始直到一个未定义的点,或者从一个未定义的点开始到同一个json).
关于如何解决这个问题有什么想法吗?可能与缓冲区大小问题有关?请帮忙!
我们终于设法解决了这个问题。 我们不知道为什么,但由于服务器返回格式正确的 json(带有换行符和制表符),这有时会导致问题出现错误。 一旦我们没有在服务器中格式化 json,将其作为纯字符串返回,错误就自行消失了...... 这对我来说是一个谜,如果有人有解释,答案被广泛接受为正确答案。谢谢!