首页 > 其他分享 >ios 之 netty版本swiftNio(socket创建)

ios 之 netty版本swiftNio(socket创建)

时间:2024-04-02 10:30:13浏览次数:17  
标签:netty group socket 创建 self ios host swiftNio port

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:NIOSSLContext
        self.host = host;
        self.IP = ip;
        self.port = port;
        group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
        readHanddle = EchoClientHandler()
        readHanddle?.didReadBytes = {[weak self](bytes) in
            self?.didReadBytes?(bytes)
        }
        readHanddle?.statusChange = {[weak self](state, err) in
            if(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 ssl
                guard 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 = .connecting
        if ip.count > 0 {
            eventLoopfuture =  bootstrap.connect(host:ip, port: port)
        }else{
            eventLoopfuture =  bootstrap.connect(host:host, port: port)
        }
    }

标签:netty,group,socket,创建,self,ios,host,swiftNio,port
From: https://blog.csdn.net/karision/article/details/137258933

相关文章

  • [Socket/计算机网络] Java Socket编程:基础篇
    1计算机网络的核心概念网络通信概念:两台设备之间通过网络实现数据传输2.网络通信:将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口,供程序员使用,完成网络通信网络概念:两台或多台设备通过一定物理设备连接起来构成了网络根据网络的覆......
  • Flutter iOS上架指南
     本文探讨了使用Flutter开发的iOS应用能否上架,以及上架的具体流程。苹果提供了AppStore作为正式上架渠道,同时也有TestFlight供开发者进行内测。合规并通过审核后,Flutter应用可以顺利上架。但上架过程可能存在一些挑战,因此可能需要专业技术人员或上架服务商的协助。Flutter作为......
  • Fiddler可以捕获和分析WebSocket通信
    自动化测试WebSocket接口使用Fiddler捕获WebSocket流量的步骤如下:其他WebSocket调试工具:用python的`websockets`库连接到ws接口:Fiddler可以捕获和分析WebSocket通信。Fiddler是一个功能强大的HTTP调试代理工具,广泛用于捕获HTTP和HTTPS网络流量。从它的较......
  • WebSocket连接
    启动类增加注解并进行Bean注入@EnableWebSocket@BeanpublicServerEndpointExporterserverEndpointExporter(){ returnnewServerEndpointExporter();}packagecom.hwd.campus.security.biz.websocket;importcom.hwd.campus.security.biz.utils.WebsocketUtil;impor......
  • 大屏可视化项目示例--基于Vue3+vite2+echart+mock+axios+dataV
    图例: 项目环境:Vite、Echarts、Npm、Node、axios、mock、vue3、dataV。项目地址:IofTV-Screen-Vue3:......
  • Netty学习——源码篇9 Handler其他处理与异步处理
    1ChannelHandlerContext    每个ChannelHandler被添加到ChannelPipeline后,都会创建一个ChannelHandlerContext,并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加到其中的Chan......
  • Cisco ASR 1000 Router IOS XE Software Release Dublin-17.12.3 ED
    CiscoASR1000RouterIOSXESoftwareReleaseDublin-17.12.3EDCiscoASR1000SeriesAggregationServicesRouters请访问原文链接:https://sysin.org/blog/cisco-asr-1000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科ASR1000系列聚合服务路由器Re......
  • Cisco ISR 4000 Series IOS XE Release IOSXE-17.13.1a ED
    CiscoISR4000SeriesIOSXEReleaseIOSXE-17.13.1aED思科4000系列集成服务路由器系统软件请访问原文链接:https://sysin.org/blog/cisco-isr-4000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科4000系列集成服务路由器让您的分支机构站点为实施全数......
  • iOS移动应用实时查看运行日志的最佳实践
    目录一、设备连接二、使用克魔助手查看日志三、过滤我们自己App的日志......
  • iOS开发者必备的实时查看应用程序运行日志技术
    目录一、设备连接二、使用克魔助手查看日志三、过滤我们自己App的日志......