Flutter对socekt使用
第一步:从pub.dev中使用web_socket_channel
地址:https://pub.dev/packages/web_socket_channel
第二步:编写一个需要的抽象方法:
abstract class ISocket {
///与服务器进行连接
ISocket open(String vid);
///发送消息
ISocket send(String message);
///关闭连接
void close();
}
第三步:在使用的页面中导入web_socket_channel
import 'package:web_socket_channel/io.dart';
第四步:实现抽象方法,实现socket连接
class HiSocket implements ISocket {
final Map<String, dynamic> headers; //定义头部
static const _URL = 'wss://api.devio.org/uapi/fa/barrage/'; //连接地址
IOWebSocketChannel _channel; //实例socket
///心跳间隔秒数,根据服务器实际timeout时间来调整,这里的Nginx服务的timeout是60秒
int _intervalSeconds = 50;
HiSocket(this.headers);
@override
void close() {
if (_channel != null) {
_channel.sink.close();
}
}
@override
ISocket listen(callBack) {
_callBack = callBack;
return this;
}
@override
ISocket open(String vid) {
_channel = IOWebSocketChannel.connect(_URL + vid,
headers: headers, pingInterval: Duration(seconds: _intervalSeconds));
_channel.stream.handleError((error) {
print("连接发送错误:$error");
}).listen((message) {
//处理服务器返回的消息
});
return this;
}
@override
ISocket send(String message) {
_channel.sink.add(message);
return this;
}
}
第五步:再要使用的页面实现socket
HiSocket _hiSocket;
@override
void initState() {
super.initState();
_hiSocket = HiSocket(headers);
_hiSocket.open(vid).listen((value) {
//处理消息
});
}
结束