如何在flutter中自定义websocket路由-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

如何在flutter中自定义websocket路由

如何在flutter中自定义websocket路由?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联公司是一家专业的成都网站建设公司,我们专注做网站、成都网站设计、网络营销、企业网站建设,买友情链接广告投放为企业客户提供一站式建站解决方案,能带给客户新的互联网理念。从网站结构的规划UI设计到用户体验提高,创新互联力求做到尽善尽美。

在 lib 目录下新建一个 socket 目录 里面创建两个文件main.dart和router.dart;
main.dart : 主要控制websocket的连接 断开 和收到消息的处理;
router.dart 则为websocket 服务端返回的消息做路由处理;

router.dart

import 'package:lee/logic/user.dart';

typedef void RouteHandle(Map params);

var wsRouter = new WsRouter();

class WsRouter {
 static Map _routers = new Map();

 init() {
  routers.forEach((route) {
   route.forEach((name, value) {
    this.add(name, value);
   });
  });
 }

 // 增加路由
 void add(String name, RouteHandle handle) {
  WsRouter._routers[name] = handle;
 }

 // 路由处理
 Future handle(String name, Map params) async {
  RouteHandle handle = WsRouter._routers[name];
  if (handle == null) {
   print("路由不存在");
   return;
  }
  handle(params);
 }
}

List> routers = [
 {"login": UserLogic.login},
 {"kick": UserLogic.kick},
];

main.dart

import 'package:lee/socket/router.dart';
import 'package:web_socket_channel/io.dart';
import 'dart:convert';

var webSocket = new WebSocket();

class WebSocket {
 // webSocket连接
 IOWebSocketChannel webSocketChannel;

 factory WebSocket() => _webSocket();

 static WebSocket _instance;

 // 构造函数
 WebSocket._() {
  // 初始化webSocket路由
  wsRouter.init();
 }

 static WebSocket _webSocket() {
  if (_instance == null) {
   _instance = WebSocket._();
  }
  return _instance;
 }

 conn() {
  IOWebSocketChannel channel = new IOWebSocketChannel.connect(
    "ws://127.0.0.1:8080/ws",
    pingInterval: Duration(milliseconds: 100));

  channel.stream
    .listen((data) => onMessage(data), onError: onError, onDone: onDone);

  this.webSocketChannel = channel;
 }

 onMessage(response) async {
  // 例如服务端返回的大概是这样一个json
  // {"cmd":"kick","data":{}}
  // {"cmd":"login","data":{}}
  Map params = json.decode(response);
  wsRouter.handle(params["cmd"], params["data"]);
 }

 onError(err) async {}

 onDone() async {}
}

关于如何在flutter中自定义websocket路由问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


分享名称:如何在flutter中自定义websocket路由
链接地址:http://kswsj.cn/article/ppeejg.html

其他资讯