网络处理1-异步GET请求

基于java实现的弹幕视频网站 开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示弹幕视频网站,在弹幕视频网站可以查看首页、视频信息、商品信息、论坛信息、我的、跳转到后台、购物车、客服等内容前台首页界面图登录,通过登录填写账号、密码等信息进行登录操作登录界面图视频信息界面图。 阅读详情

http://www.cnblogs.com/mjios/archive/2013/04/17/3026431.html


前言

云计算

近几年来, 云计算 是一个非常热门的技术名词,很多专家认为,云计算会改变互联网的技术基础,甚至会影响整个产业的格局。可能还很多人不了解什么是云计算,简单来说,就是把用户的数据(比如文档、照片等)、用户需要使用的软件、用户需要搜索的资源都保存在"云端",并不用保存在用户本地。你可以将"云端"看做了一台超级计算机,其实是由无数台大型服务器组成的。

移动应用

现在很多的移动应用也类似于"云计算"的模式,比如新浪微博,用户的数据都是保存在新浪服务器的数据库里面。当用户想在手机上看到自己的微博数据时,大致需要以下几个过程:

1.新浪微博手机客户端发送HTTP请求到新浪服务器

2.服务器响应后返回数据给客户端

3.客户端对数据进行解析后以图形界面的形式(如列表形式)呈现给用户

网络处理这一块在移动开发中占据着非常重要的地位 ,我们这个专题主要来学习iOS网络处理中的HTTP请求。

 

一、API简介

如果你想在iOS中发送Http请求的话,有很多方式可以选择,我在这里介绍几个常见的:

1.苹果自带的API

1> Core Foundation框架中的 CFNetwork API:纯C语言的API,性能非常高

2> Foundation框架中的 NSURLConnection API:Objective-C的API,性能也不错,简单易用

2.第3方开源框架

1> ASIHttpRequest

2> AFNetworking

我们这个专题主要来研究NSURLConnection的使用,至于第3方框架的学习,网上也有很多资源可以搜索。

 

二、发送异步的GET请求

众所周知,HTTP的主要请求方式有2种:GET请求和POST请求,接下来先演示下如何发送一个GET请求。

需要注意的是,你最好发送一个异步请求,不要发送同步请求。iOS程序启动后,系统会默认创建一条主线程,也称为UI线程,这条主线程专门用来渲染UI界面、处理UI界面和用户之间的交互,比如处理用户的触摸事件、文本输入事件等。所谓异步请求,就是在后台线程发送请求,不在主线程发送请求。一般情况下,客户端发出请求后,需要等待服务器的数据返回,如果服务器处理速度比较慢或者网速慢的话,可能要等很长时间。因此,如果你执意要发送同步请求,也就是在主线程发送请求,会造成主线程阻塞,容易出现卡机现象,给用户带来极差的体验。

1.利用NSURLConnection发送异步请求

 1 // 请求地址
 2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username=123&pwd=123";
 3 
 4 // 初始化一个NSURL对象
 5 NSURL *url = [NSURL URLWithString:urlString];
 6 
 7 // 初始化一个请求
 8 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 9 // 设置请求方法,可以省略,默认就是GET请求
10 request.HTTPMethod = @"GET";
11 // 如果60秒过后服务器还没有相应,就算请求超时
12 request.timeoutInterval = 60;
13 
14 // 初始化一个连接
15 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
16 // 开始一个异步请求
17 [conn start];

1> 第2行的是请求地址,由于是GET请求,请求参数是直接拼接到路径后面的

2> 第17行调用NSURLConnection的start方法发送一个HTPP请求,默认就是 异步 请求

 

2.NSURLConnectionDataDelegate

在前面的第15行代码中,初始化NSURLConnection对象的时候传了个self做代理(delegate),我这里的self是控制器。在客户端跟服务器交互过程会不断地给这个代理对象发送消息,也就是会不断地调用代理对象的相应方法。iOS在 NSURLConnectionDataDelegate协议中定义了很多代理方法,我这里只介绍常用的3个方法:

 1 #pragma mark - NSURLConnectionDataDelegate
 2 #pragma mark 接收到服务器返回的数据时调用(如果数据比较多,这个方法可能会被调用多次)
 3 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
 4     NSLog(@"接收到服务器返回的数据");
 5     // 拼接数据
 6     [self.data appendData:data];
 7 }
 8 
 9 #pragma mark 网络连接出错时调用
10 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
11     NSLog(@"网络连接出错:%@", [error localizedDescription]);
12 }
13 
14 #pragma mark 服务器的数据已经接收完毕时调用
15 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
16     NSLog(@"服务器的数据已经接收完毕");
17     // 解析成字符串数据
18     NSString *str = [[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding] autorelease];
19     NSLog(@"%@", str);
20 }

1> 当服务器有数据返回时就会调用第3行的代理方法,返回的数据以NSData的格式传入。如果数据比较多,比如下载大文件时,这个方法可能会被调用多次。

2> 第6行用一个NSMutableData对象拼接服务器返回的所有数据,self.data是一个NSMutableData。

3> 当服务器已经成功返回所有的数据后,会调用第15行的代理方法,到此为止,self.data里面存放着服务器端返回的所有数据

4> 由于我这边服务器返回的是JSON字符串数据,所以在18行将self.data转换为NSString,然后打印出来看看数据对不对

 

3.对中文参数进行编码

如果你的请求参数中含有中文,必须先进行编码,然后再拼接到请求路径后面。

下面的请求路径写法是 错误 的:

1 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username=母鸡";

应该这样写:

1 // 使用UTF-8对中文参数进行编码
2 NSString *param = [@"母鸡" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
3 
4 // 请求地址
5 NSString *baseUrl = @"http://192.168.1.102:8080/MJServer/login?username=";
6 NSString *urlString = [baseUrl stringByAppendingString:param];

1> 第2行使用UTF-8对中文参数进行编码

2> 在第6行拼接编码后的参数到请求路径中

 

4.取消请求

如果用户的网络状况不是很好,那么在登录的过程中,用户很可能会点击"取消"按钮来取消登录

当用户点击了取消按钮,我们也应该终止之前发送的请求,这时候可以这样做

[conn cancel];

conn是一个NSURLConnection对象


深度学习部署工程师--8(docker+TensorRT部署到推理+yolo人体检测)下 本文介绍了YOLOv5模型通过TensorRT加速部署的流程。首先需要检查磁盘空间,确保有30GB可用。文章对比了不同推理方式的性能:int8量化+TensorRT可达200FPS,纯TensorRT为166FPS,CUDA为147FPS,CPU为93FPS。重点讲解了将YOLOv5模型导出为ONNX格式的详细步骤,包括修改Detect类的forward方法以移除decode运算,使用git patch批量修改代码,安装必要的依赖库,以及通过onnx-graphsurgeon工具修改ONNX图结构。最终目标 阅读详情

相关推荐

让AI镜头“活”起来:22个核心运镜提示词,告别视频画面呆板

介绍了22种影视级镜头语言的AI提示词用法。内容涵盖推轨/后拉镜头等距离变化技巧、横摇/俯仰等方向控制手法、环绕/升降等空间位移方式,以及POV视角等特殊构图。

weixin_43489601的博客 6277

【iOS】网络请求GET与POST

从上边两个不难看出两个的区别,无非就是post多了一个请求体,其他的也没什么区别,但是post的好处还有很多,首先它的保密性和安全性就比较高,所以以后我们还是尽量多使用post请求数据的好,另外上述说的仅仅只是使用系统自带方法的代码,当然你也可以使用第三方库,比如AFNetworking它使用起来就更加方便。

qq_72437394的博客 2096

ONFI5.0命令字实战指南:从基础操作到高级应用

本文深入解析ONFI5.0协议的核心——命令字,提供从基础操作到高级应用的实战指南。详细拆解了NAND闪存的复位、读状态、数据读取(00-30)、页编程(80-10)和块擦除(60-D0)等关键命令周期,并探讨了多平面操作与缓存操作等高级性能优化技巧,帮助开发者高效、稳定地与NAND芯片进行底层交互。

vscode5coder的博客 463

【iOS】iOS中简单的网络请求

在完成暑假最后一个项目——仿写苹果原生APP天气预报时,需要进行网络请求,且网络请求在iOS开发中是比较重要的知识点,特学习并记录。

2301_80467753的博客 2388

Seedance2.5本地部署:从环境配置到批量生图的工程实践指南

最近在几个技术社群里,看到不少人在讨论 AI 生图和视频工具。有人抱怨在线服务要么贵、要么慢、要么生成内容受限;也有人尝试了各种“免费”方案,结果不是功能残缺就是暗藏收费陷阱。就在大家觉得“又好又免费”的本地部署方案门槛太高时,Seedance2.5 突然冒了出来,而且口号相当直接:本地部署、完全免费、不联网、功能对标甚至超越一些付费产品。 但这类宣传我们见多了,真正的问题是:它到底能不能在普通开发者的机器上跑起来?生成质量是否真的可用?长期使用会不会遇到模型崩溃、依赖冲突或者资源爆炸?更重要的是,对于一个

weixin_27419879的博客 1129

分享一个N-MOS管和P-MOS管驱动应用实例

大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一下MOS管驱动相关的知识。 MOS管在电路设计中是比较常见的,按照驱动方式来分的话,有两种,即:N-MOS管和P-MOS管。MOS管跟三极管的驱动方式有点类似,但又不完全相同,那么今天笔者将会给大家简单介绍一下N-MOS管和P-MOS管的工作原理,并结合自己实际的应用来给大家分享一下如何来驱动N-MOS管和P-MOS管。 首先,我们先来看一下N-MOS管和P-MOS管分别在电路中的电气符号: 咋一看上面两个电气符号,似乎非常的相似,可能让很

『芯知识学堂』SingleYork 的博客 3万+

ios网络请求

ios请求概述 在ios开发中,网络请求并不是特比额复杂,这得益于一个给力的第三方库——AFNetworking的出现。 AFNetworking 1.0建立在NSURLConnection的基础API之上,AFNetworking 2.0开始使用NSURLConnection的基础API和部分NSURLSession基础之上的API。现有的AFNetworking...

qq_41727218的博客 1208

【SEED Labs 2.0】V*N Tunneling Lab

本文为 SEED Labs 2.0 - V*N Tunneling Lab 的实验记录。本实验工作量较大,但难度不大,重点在于搞清是谁发给谁,走的什么路径。另外,本次实验由于网络中的设备较多,修改了环境变量方便分清哪个窗口是哪个设备。这样操作起来就方便多了。...

Chenyang的博客 6977

IOS开发之——网络-HTTP请求(4)

一 概述 HTTP网络请求中的几个概念 IOS中发送HTTP请求 HTTP请求示例 二 HTTP网络请求中的几个概念 2.1 URL 什么是URL URL的全称是Uniform Resource Locator,统一资源定位符 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址、位置,互联网上的每个资源都有唯一的URL URL的基本格式 协议://主机地址/路径 http://192.168.0.1/img/a.gif 协议:不同的协议,代表着不同的资源查找方式、资源传输方式

我的博客 1850

新手必看!Unity中Tag和Layer的7个实际应用场景(含MOBA案例)

本文深入探讨Unity中Tag和Layer的7个实际应用场景,特别以MOBA游戏开发为例,详细解析如何利用LayerMask进行高效场景管理和碰撞检测优化。从双相机方案到射线检测的精准控制,帮助开发者掌握这些基础功能的进阶用法,提升游戏性能和开发效率。

weixin_28723171的博客 313

智能小车避障功能的实现(cpp,ubuntu)

智能小车避障功能的实现(cpp,ubuntu)

weixin_62135607的博客 4376

网络处理(1)-异步GET请求

一、API简介 如果你想在iOS中发送Http请求的话,有很多方式可以选择,我在这里介绍几个常见的: 1.苹果自带的API 1> Core Foundation框架中的CFNetwork API:纯C语言的API,性能非常高 2> Foundation框架中的NSURLConnection API:Objective-C的API,性能也不错,简单易用 2.第3方开源框

码虫 531

Go游戏服务器开发的一些思考(一):语言层面

Go是比C++更好用的高级语言使用Go作为服务器开发的主语言前,首先需要对Go语言做下定性。在接触Go前,可能给人的印象(至少是我),Go是一门脚本语言。看了 官方文档 ,才知道Go是一门高级语言。与C++相比,它有以下优势: 面向接口的编程没有C++复杂的面向对象语法,如类、继承、多态、虚函数等等。Go中只有结构与接口,从语言层面上,直接指导功能与功能间的解耦。直接且语法简单 提供语言反射机制提供

范安崇的博客 9560

WP7 网络操作(1) HttpWebRequest基本的GET请求

一、预备知识:   什么是Get请求?什么是Url?请直接Baidu,Google,Bing。 二、WP7的网络操作:非阻塞的异步操作(暂时还没有看到直接的同步的操作的方式)。 三、主要代码: public class Http { public delegate void HandleResult(string result); pri

jazywoo_在路上 831

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: iOS 在UILabel显示不同的字体和颜色
下一篇: 网络处理2-异步POST请求和同步请求
宇之楓鷙
博客等级 码龄17年 5粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值