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.hqwc.cn/news/586055.html

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

相关文章

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现: 在江河中,堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中,需要在受侵蚀严重的部位设置一些人工设施,以减弱水流的冲刷,促进该处泥沙的淤积&…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容:修复播放器接口问题,把接口本地化,但是集成外链播放器…

微信公众号-图片裁剪并实现上传

一、背景 最近有个需求,需要用户按比例上传图片,即需要在上传前,让用户手动对图片进行裁剪。 看到这个诉求,我就去扒微信的api,发现有个属性叫wx.cropImage是做图片裁剪的,且可以传入对应的裁剪比例。在介…

Leetcode - 2580. 统计将重叠区间合并成组的方案数

文章目录 思路AC CODE总结 题目链接:2580. 统计将重叠区间合并成组的方案数 思路 一个区间合并的板子,计算出区间数目之后,每个区间都有放左和放右两种选法,所以最后的答案就是 2 k 2^k 2k。但是需要用c进行二维数组的排序&…

大模型时代的程序员:不会用AIGC编程,未来5年将被淘汰?

过去,初级程序员入职学习编程时,往往是师傅给一个任务需求,教大体的思路,然后在初级程序员写出代码工作当中培训和纠正,针对不同的命题告诉不同的方案,直到初级程序员把这些经验学会。 但大模型的到来把这…

【MySQL数据库】Table ‘xxx‘ doesnot exist错误解决

有两种可能性: 1、数据库中确实不存在这张表了,检查表被删除的原因。 2、数据库中存在表,但还报表不存在的错误,检查MySQL数据库的自动更新是否关闭,如果没有的话就通过图中所示方式关闭。

C++ | Leetcode C++题解之第1题两数之和

题目&#xff1a; C 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hashtable;for (int i 0; i < nums.size(); i) {auto it hashtable.find(target - nums[i]);if (it …

差分与前缀和

目录 差分法 例题&#xff1a;大学里的树木要打药 前缀和 例题&#xff1a;大学里的树木要维护 差分法 差分法的应用主要是用于处理区间问题&#xff0c;当一个数组要在很多不确定的区间&#xff0c;加上相同的一个数&#xff0c;我们如果每个数都进行加法操作的话&#x…

备忘录软件哪款可以加密?备忘录app怎么加密?

在快节奏的现代生活中&#xff0c;备忘录软件已成为我们不可或缺的助手。它不仅能方便我们随时记录任务事项&#xff0c;捕捉生活中的灵感&#xff0c;还便于我们随时修改和查看记录内容&#xff0c;实用性极高。然而&#xff0c;随着记录内容的增多&#xff0c;数据安全性问题…

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-修改分机注册间隔时间

文章目录 前言联系我们例子问题一问题二 前言 注册周期&#xff1a;SIP客户端会每隔设定的时间发送一次注册请求&#xff0c;freeswitch 如果收到客户端的注册请求&#xff0c;就会让你注册成功&#xff1b;但如果在设定的时间内&#xff0c;freeswitch 任没有收到软件的注册请…

爬虫部署平台crawlab使用说明

Crawlab 是一个基于 Go 语言的分布式网络爬虫管理平台&#xff0c;它支持 Python、Node.js、Jar、EXE 等多种类型的爬虫。 Crawlab 提供了一个可视化的界面&#xff0c;并且可以通过简单的配置来管理和监控爬虫程序。 以下是 Crawlab 的一些主要优点&#xff1a; 集中管理&am…

Netty核心原理剖析与RPC实践11-15

Netty核心原理剖析与RPC实践11-15 11 另起炉灶&#xff1a;Netty 数据传输载体 ByteBuf 详解 在学习编解码章节的过程中&#xff0c;我们看到 Netty 大量使用了自己实现的 ByteBuf 工具类&#xff0c;ByteBuf 是 Netty 的数据容器&#xff0c;所有网络通信中字节流的传输都是…