小编Tra*_*iet的帖子

Flutter从服务器解码错误中取出日文字符

我正在用Flutter构建一个移动应用程序.

我需要json从服务器获取包含日文文本的文件.返回的一部分json是:

{
     "id": "egsPu39L5bLhx3m21t1n",  
     "userId": "MCetEAeZviyYn5IMYjnp",  
     "userName": "? ??",  
     "content": "????????????2018/05/06?????????????"
}
Run Code Online (Sandbox Code Playgroud)

在postman或chrome上尝试相同的请求会得到预期的结果(日语字符在输出中正确呈现).

但是当使用Dart通过以下代码片段获取数据时:

  import 'dart:convert';
  import 'package:http/http.dart' as http;

  //irrelevant parts have been omitted    
  final response = await http.get('SOME URL',headers: {'Content-Type': 'application/json'});
  final List<dynamic> responseJson = json.decode(response.body)
  print(responseJson);
Run Code Online (Sandbox Code Playgroud)

printlogcat 中的语句结果是

{
     id: egsPu39L5bLhx3m21t1n, 
     userId: MCetEAeZviyYn5IMYjnp, 
     userName: å·½ è£äº®, 
     content: ãã«ãã©ã½ã³å®èµ°ã«å¯¾ãã¦2018/05/06ã®ãµãããããè¡ãã¾ããï¼
}
Run Code Online (Sandbox Code Playgroud)

请注意,只有日文字符(content键的值)变为乱码,其他非日语值仍然正确显示.

两个通知是:

  1. 如果我尝试在我的应用程序中显示此日文文本,Text()则会呈现相同的乱码,因此这不是Android Studio的logcat的错误.
  2. 如果我使用Text('put some Japanese text here directly')(例如Text('??'):),Flutter会正确显示它,因此不是Text小部件会弄乱日文字符.

rest cjk dart flutter

10
推荐指数
2
解决办法
3231
查看次数

滚动更新期间,Kubernetes 不会等待所有 Websocket 连接关闭才终止

我试图在使用 EKS(AWS K8s 服务)进行滚动更新期间实现 0 停机时间。

我有一台 WebSocket 服务器,我想确保在该服务器的滚动更新期间,将保留现有连接,直到工作完成后关闭 WebSocket。

我以为 K8s 滚动更新功能可以帮助我解决这个问题,但事实并非如此。我尝试过,它只是在仍然与 WebSocket 连接的情况下杀死了 pod。

如果我正确理解该文档,那么 pod 终止将如下所示:

  1. 用户向 K8s API 发送 pod 删除信号
  2. K8s 停止将新流量路由到该 pod 并发送 SIGTERM 信号
  3. grace-period应用程序必须处理此信号并在指定的时间内(默认为 30 秒)启动自身的优雅终止
  4. 之后,K8s 发送 SIGKILL 信号强制终止 pod。

如果我的上述理解是正确的,显然没有办法告诉 K8s:

  1. 不要中断当前连接
  2. 让它们根据需要运行(它们最终会关闭,但周期差异很大)
  3. 所有连接关闭后,终止 pod

问题:有什么方法可以确保 K8s:

  1. 不中断 WebSocket 连接
  2. 不强制应用程序终止特定的连接grace-period
  3. 检测所有 WebSocket 连接何时关闭并终止 pod

如果有人可以帮助我,我将不胜感激。

websocket kubernetes

7
推荐指数
1
解决办法
3082
查看次数

使用特定用户和权限将Mount docker绑定

场景 我想按照本指南在Docker中使用Docker

关键点是,您需要将主机上的Docker套接字绑定安装到容器内部的Docker套接字中,以便从容器内部使用Docker。

问题 主机上的Docker套接字始终绑定安装在root:root下的Docker容器中。当我以非root用户身份执行容器时,执行Docker命令会导致权限被拒绝。

问题 如何使用特定的用户:组和权限将主机中的文件挂载到Docker容器中?

docker docker-compose

6
推荐指数
1
解决办法
124
查看次数

Istio Envoy 访问日志中,什么是上游、下游远程、本地

设想

我正在使用 Istio 1.5

这个问题我知道了 Istio 使用的默认 envoy 访问日志格式,即

\[%{TIMESTAMP_ISO8601:timestamp}\] \"%{DATA:method} (?:%{URIPATH:uri_path}(?:%{URIPARAM:uri_param})?|%{DATA:}) %{DATA:protocol}\" %{NUMBER:status_code} %{DATA:response_flags} \"%{**DATA:mixer_status**}\" %{NUMBER:bytes_received} %{NUMBER:bytes_sent} %{NUMBER:duration} (?:%{NUMBER:upstream_service_time}|%{DATA:tcp_service_time}) \"%{DATA:forwarded_for}\" \"%{DATA:user_agent}\" \"%{DATA:request_id}\" \"%{DATA:authority}\" \"%{DATA:upstream_service}\" %{DATA:upstream_cluster} %{DATA:upstream_local} %{DATA:downstream_local} %{DATA:downstream_remote} %{**DATA:requested_server**}
Run Code Online (Sandbox Code Playgroud)

注意:由于引用的问题相当旧,我不确定这种格式对于 istio 1.5 是否仍然正确,但它看起来很漂亮。

这是我的日志

来源:

"-" "-" 0 232 10 9 "-" "curl/7.52.1" "772a4c12-bb1a-4f26-9a18-f354f5a081e0" "ai-service:5000" "10.2.34.209:5000" outbound|5000||ai-service.default.svc.cluster.local 10.2.8.95:45340 172.20.126.246:5000 10.2.8.95:53462 - default
Run Code Online (Sandbox Code Playgroud)

目的地:

[2020-03-26T23:19:00.311Z] "- - -" 0 - "-" "-" 1068 379 9 - "-" "-" "-" "-" "127.0.0.1:5000" inbound|5000||ai-service.default.svc.cluster.local 127.0.0.1:37604 10.2.34.209:5000 10.2.8.95:45340 outbound_.5000_._.ai-service.default.svc.cluster.local - …
Run Code Online (Sandbox Code Playgroud)

istio envoyproxy

5
推荐指数
1
解决办法
7172
查看次数

我可以使用端口 80 和 443 的 EKS NodePort 服务吗

我正在使用EKSK8s由本机提供的服务AWS)。

我的问题是:

  1. 是否可以NodePort通过端口 80 和 443 公开服务(默认NodePort范围是30000 - 32767)。
  2. 如果是的话,如何使用EKS.

请注意,我知道使用服务的后果NodePort,并研究了诸如LoadBalancer和 之类的替代方案Ingress。我将继续使用 NodePort,因为我必须这样做。

kubernetes amazon-eks

4
推荐指数
1
解决办法
5145
查看次数

Flutter Redux Navigator GlobalKey.currentState返回null

我正在使用Redux开发Flutter.

当用户启动一个应用程序,我想Redux自动dispatchaction.此操作将Navigator依赖于推送不同的路径.

此片段由颤振dev的部件提供使用该GlobalKey使用Navigatormiddleware.

在此之后,我按如下方式组织我的代码:

main.dart

void main() {
  final store = new Store(appStateReducer,
      middleware:createRouteMiddleware()
  );
  runApp(new MyApp(store));
}

class MyApp extends StatelessWidget {
  final Store<AppState> store;

  MyApp(this.store);

  @override
  Widget build(BuildContext context) {
    return new StoreProvider<AppState>(
        store: store,
        child: MaterialApp(
            routes: {
              Routes.REGISTER: (context) {
                return RegisterScreenContainer();
              },
              Routes.SET_PROFILE: (context) {
                return SetProfileScreenContainer();
              },
              //Routes.HOME = "/" so this route will be run first
              Routes.HOME: …
Run Code Online (Sandbox Code Playgroud)

redux flutter redux-middleware

3
推荐指数
1
解决办法
2316
查看次数