请教多线程的应用问题,用Http协议post协议

请教多线程的应用问题,用Http协议post协议,第1张

首先,需要明确一下http通信流程,Android目前提供两种http通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient相对来讲更大更全能,但是速度相对也要慢一点。在此只介绍HttpClient的通信流程:

1.创建HttpClient对象,改对象可以用来多次发送不同的http请求

2.创建HttpPost或HttpGet对象,设置参数,每发送一次http请求,都需要这样一个对象

3.利用HttpClient的execute方法发送请求并等待结果,该方法会一直阻塞当前线程,直到返回结果或抛出异常。

4.针对结果和异常做相应处理

根据上述流程,发现在设计类的时候,有几点需要考虑到:

1.HttpClient对象可以重复使用,因此可以作为类的静态变量

2.HttpPost/HttpGet对象一般无法重复使用(如果你每次请求的参数都差不多,也可以重复使用),因此可以创建一个方法用来初始化,同时设置一些需要上传到服务器的资源

3.目前Android不再支持在UI线程中发起Http请求,实际上也不该这么做,因为这样会阻塞UI线程。因此还需要一个子线程,用来发起Http请求,即执行execute方法

4.不同的请求对应不同的返回结果,对于如何处理返回结果(一般来说都是解析json&更新UI),需要有一定的自由度。

5.最简单的方法是,每次需要发送http请求时,开一个子线程用于发送请求,子线程中接收到结果或抛出异常时,根据情况给UI线程发送message,最后在UI线程的handler的handleMessage方法中做结果解析和UI更新。这么写虽然简单,但是UI线程和Http请求的耦合度很高,而且代码比较散乱、丑陋。

Option Explicit

Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long

Public Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

Public id As Long

Public Function AddText()

Do

Form1.Text1.Text = "Adding to Text1 - "

doevents

Loop

End Function

Option Explicit

Private Sub Command1_Click()

id = CreateThread(ByVal 0&, ByVal 0&, AddressOf AddText, ByVal 0&, 0, id)

End Sub

Private Sub Command2_Click()

Call TerminateThread(id, ByVal 0&)

End Sub

//PS 请注意里面所用到的控件...

我可以帮助你,你先设置我最佳答案后,我百度Hii教你。你的串号我已经记下,采纳后我会帮你制作

应用服务器的性能分析是复杂的,关注点很多。比如典型场景Web服务器+数据库,底层网络链路和网络硬件性能姑且不论,单看:Web服务器对静态文件的读写与磁盘和文件系统IO性能紧密相关;对数据的处理和数据库性能相关;而高并发访问则关系到操作系统的线程、网络套接字以及异步网络模型的效率。

在数据量大的情况下,数据库的性能成为一个至关重要的因素,随之带来Web服务器等待数据库的时间。在此基础上如果有大量的用户同时访问,那么会对Web服务器带来什么样的影响?以下主要讨论这个问题。

对于并发访问的处理,一般有两种处理机制:异步非阻塞机制、多线程阻塞机制(介绍略)。在测试选择上,前者使用基于Python的Tornado服务器,而后者使用基于Java的Tomcat服务器。注意:本文并非讨论开发语言的优劣,事实上,新版本的Java也支持异步机制,甚至高性能的epoll等。

测试工具:变态级的http_load

测试方法:使用该工具模拟1、10、100、1000个客户端并发访问以下场景,每次测试时间1分钟,得到服务器端每秒的总响应数。注意:由于Tomcat最大线程的限制(下面有提到)以及操作系统对端口数量的限制,1000个并发已经能够得到明显的结论了。

测试场景:

静态文件的读写。一个html文件和一大一小两个图片,大小分别为676k、1.6M和12k,使用http_load工具随机读取。静态文件读写的耗时可以忽略不计的。

模拟一个耗时操作,比如数据库操作。注意:耗时操作并不占用Web服务器本身的资源,它更多地体现的是Web服务器对并发访问处理的“合理”性。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/312245.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存