ios 之 netty版本swiftNio(socket创建)

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)}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何生成一个指定长度的空数组?

简便写法:使用constructor构造函数进行创建,第一个空数组 [ ] 表示创建一个空数组,然后调用 constructor 属性并传入参数指定数组长度。 [].constructor(17)可用于遍历,例如使用ngFor进行单纯的遍历,参数为遍历次数。

电商API分享:如何批量获取商品详情页数据(属性图价格sku视频评论)

电商API(应用程序接口)通常提供了丰富的数据获取功能,使开发者能够方便地获取商品详情页的各种数据,包括商品属性、图片、价格、SKU(库存量单位)、视频以及评论等。以下是一个基本的步骤指南,用…

SSM框架学习——SqlSession以及Spring与MyBatis整合

SqlSession以及Spring与MyBatis整合 准备所需要的JAR包 要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只是使用这两个框架中所提供的JAR包是不够的,还需要配合其他包使用: Spring的JAR包MyBatis的JAR包Spring…

【信贷后台管理系统之axios的二次封装(四)】

文章目录 一、axios的二次封装二、配置后端接口地址三、登录接口api联调四、贷款申请接口api编写联调 一、axios的二次封装 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 src下新建utils,新建request.js用来封装axios 控…

中科驭数超低时延网络解决方案入选2023年度金融信创优秀解决方案

近日,由中国人民银行领导、中国金融电子化集团有限公司牵头组建的金融信创生态实验室发布「2023年度第三期金融信创优秀解决方案」,中科驭数超低时延网络解决方案从众多方案中脱颖而出,成功入选,代表了该方案的技术创新和金融实践…

共享社会经济路径(SSP1-5)中国及分省人口预估数据库_v2

v1数据集: 在共享社会经济路径(SSPs)全球框架下,根据本地化人口和经济参数,采用人口-发展-环境(PDE)模型,构建2020-2100年SSPs人口格点数据;采用柯布-道格拉斯&#xff…

网络钓鱼升级 Darcula如何窃取用户信息

近日,网络安全领域一种名为 “Darcula” 的网络钓鱼欺诈(PhaaS)悄然兴起。这种新型钓鱼方式不同于传统的手段,它巧妙地利用了谷歌信息和 iMessage 的富通信服务(RCS),成为了网络犯罪分子的新手段…

基于springboot实现学生读书笔记共享平台系统项目【项目源码+论文说明】

基于springboot实现学生读书笔记共享平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者…

Linux——软件管理

目录 Linux应用程序基础 应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包封装类型 RPM包管理机制 使用YUM源 使用YUM源管理软件的步骤 1、配置YUM源配置文件 2、清空YUM源缓存 yum clean all 3、安装软件 yum install httpd 基本 …

【随笔】Git -- 高级命令(下篇)(八)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

ConcurrentHashMap线程安全机制

put源码: public V put(K key, V value) {return putVal(key, value, false); }/** Implementation for put and putIfAbsent */ final V putVal(K key, V value, boolean onlyIfAbsent) {if (key null || value null) throw new NullPointerException();int has…

vue快速入门(二)安装vue调试插件

教程很详细,直接上过程 上一篇 新增内容 在国内网站下载谷歌插件安装插件 点击跳转极简插件 此处我们以Chrome浏览器为例 到这里我们就成功安装了插件 使用上一篇博客的代码在浏览器F12调试一下 这样就可以使用了!!!

云原生时代来了,遗留的虚拟机怎么办?红帽 OpenShift 虚拟化实现“稳敏兼得”

作者 | 宋慧 出品 | CSDN 从云原生、容器、微服务,到现在大热的 AIGC、GPU,越来越多的技术与架构正在进入数据中心与基础设施中,以服务数字化转型中的创新业务与应用。在成熟虚拟化传统(稳态)业务和容器、新&#xff…

Vue-05

v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…

【PFA树脂交换柱】实验室高纯PFA材质过滤柱耐受电子级氢氟酸含氟树脂层析柱

PFA离子交换柱&#xff0c;也叫PFA层析柱、PFA过滤柱等&#xff0c;其原理是利用吸附剂对不同化合物有不同吸附作用和不同化合物在溶剂中的不同溶解度&#xff0c;用适应溶剂使混合物在填有吸附剂的柱内通过&#xff0c;使复杂的混合物达到分离和提纯的目的。 柱体为透明PFA材…

Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理

前言 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心&#xff0c;它集中存储您的数据&#xff0c;帮助您发现意料之中以及意料之外的情况。 环境准备 软件 …

【Linux】自定义协议+序列化+反序列化

自定义协议序列化反序列化 1.再谈 "协议"2.Cal TCP服务端2.Cal TCP客户端4.Json 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 1.再谈 “协议” 协议是一种 “约定”。在前面我们说过父亲和儿子约定打电话的例子&#xff0c;不过这是感性的认识&a…

Kafka入门到实战-第二弹

Kafka入门到实战 Kafka快速开始官网地址Kafka概述Kafka术语Kafka初体验更新计划 Kafka快速开始 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流…

【SQL Server】2. 将数据导入导出到Excel表格当中

最开始&#xff0c;博主介绍一下自己的环境&#xff1a;SQL Sever 2008 R2 SQL Sever 大致都差不多 1. 通过自带软件的方式 首先找到下载SQL Sever中提供的导入导出工具 如果开始界面没有找到自己下载的路径 C:\Program Files\Microsoft SQL Server\100\DTS\Binn下的DTSWiz…

整理开源资源:零代码开发灵魂——逻辑引擎,收藏吧

逻辑配置是零代码开发的业务核心功能&#xff0c;本质上是实现服务的编排&#xff0c;把原子的服务通过可视化编排&#xff0c;形成最终的业务逻辑。 经过小编的精心整理&#xff0c;把相关的资源全部汇总起来&#xff0c;收藏吧&#xff01; Drawflow 拖动节点多路输入/输出…