SwiftNio 简介
用于高性能协议服务器和客户端的事件驱动、无阻塞的网络应用程序框架。
SwiftNIO是一个跨平台异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
这就像Netty,但是为Swift写的。
Xcode引入swiftNio
在实际写代码前,我们需要把 SwiftNIO 加入我们的项目。我这里都是创建的 Swift Package 项目并通过 SwiftPM 添加依赖的。在 Xcode 的创建项目页面中,选择 Multiplatform 中的 Swift Package。在swiftNio中选择自己需要的库,他的库分别为
swiftNio socket创建
socket 创建跟netty类似,先创建MultiThreadedEventLoopGroup,再创建ClientBootstrap,如果需要域名自解析,新建一个resolver用作自解析。下一章讲述swiftNio 域名自解析,跟netty有点不一样。
/**创建socket 连接*/public func createNormalSocket(host:String,port:Int,ip:String = ""){
// sslContext:NIOSSLContextself.host = host;self.IP = ip;self.port = port;group = MultiThreadedEventLoopGroup(numberOfThreads: 1)readHanddle = EchoClientHandler()readHanddle?.didReadBytes = {[weak self](bytes) inself?.didReadBytes?(bytes)}readHanddle?.statusChange = {[weak self](state, err) inif(state == self?.status){//防止重复return}if(state == .none){self?.status = .none}else{self?.status = .connected}self?.stopTimer()DispatchQueue.main.async {self?.statusChange?(state == .connected,err)}}let bootstrap = ClientBootstrap(group: group!).resolver(getResolver(group: group!,host:host,ipAddress:ip))// Enable SO_REUSEADDR..channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1).channelInitializer {[weak self] channel in//add context sslguard let strongself = self else{DispatchQueue.main.async {LogTool.addlog("创建Nio Socket 失败", type: 2,success: 0)self?.statusChange?(false,nil)}return channel.pipeline.addHandler(EchoClientHandler())}return channel.pipeline.addHandler(self!.readHanddle!)}self.status = .connectingif ip.count > 0 {eventLoopfuture = bootstrap.connect(host:ip, port: port)}else{eventLoopfuture = bootstrap.connect(host:host, port: port)}}