flutter 自定义websocket路由的实现
在flutterwebsocket中服务端推送数据给客户端后很多人的处理居然都是if/switch;感觉这样的写法不咋好!
自己想的一个办法:
在lib目录下新建一个socket目录里面创建两个文件main.dart和router.dart;
main.dart:主要控制websocket的连接断开和收到消息的处理;
router.dart则为websocket服务端返回的消息做路由处理;
router.dart
import'package:lee/logic/user.dart';
typedefvoidRouteHandle(Mapparams);
varwsRouter=newWsRouter();
classWsRouter{
staticMap_routers=newMap();
init(){
routers.forEach((route){
route.forEach((name,value){
this.add(name,value);
});
});
}
//增加路由
voidadd(Stringname,RouteHandlehandle){
WsRouter._routers[name]=handle;
}
//路由处理
Futurehandle(Stringname,Mapparams)async{
RouteHandlehandle=WsRouter._routers[name];
if(handle==null){
print("路由不存在");
return;
}
handle(params);
}
}
List
main.dart
import'package:lee/socket/router.dart';
import'package:web_socket_channel/io.dart';
import'dart:convert';
varwebSocket=newWebSocket();
classWebSocket{
//webSocket连接
IOWebSocketChannelwebSocketChannel;
factoryWebSocket()=>_webSocket();
staticWebSocket_instance;
//构造函数
WebSocket._(){
//初始化webSocket路由
wsRouter.init();
}
staticWebSocket_webSocket(){
if(_instance==null){
_instance=WebSocket._();
}
return_instance;
}
conn(){
IOWebSocketChannelchannel=newIOWebSocketChannel.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":{}}
Mapparams=json.decode(response);
wsRouter.handle(params["cmd"],params["data"]);
}
onError(err)async{}
onDone()async{}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。