首页 > 代码库 > 知识点2

知识点2

1、HLS(HTTP Live Streaming)协议
简单讲就是把整个流分成一个个小的,基于HTTP的文件下载下来,每次只下载一些,前面提到的用于H5播放直播视频时引入的一个.m3u8的文件,这个文件就是基于HLS协议,存放视频流元数据的文件。

2、CDN的全称是Content Delivery
Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

3、时间戳
时间戳的作用:在控制并发时起到作用: 用户A/B同时打开某条记录开始编辑,保存是可以判断时间戳,因为记录每次被更新时,系统都会自动维护时间戳,所以如果保存时发现取出来的时间戳与数据库中的时间戳不相等,说明在这个过程中记录被更新过,这样的话可以防止别人的更新被覆盖。

4、首先简单介绍一下IOC和DI

Ioc:Inversion of Control,即“控制反转”,他不是什么新的技术,而是一种设计思想。

通常我们是这么理解,我们一般的设计思想是在对象内部直接控制,而IOC是将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。

打个比方:我们租房子,在我们和房主之间插入了一个中间人(房介),我们只需要跟房介提出我们的要求,比如房子要三室一厅、卧室向阳、房东是女的(*^_^* )、楼层不要太低、遮光不要太长等等等等,然后房介就会按照我们的要求给我们提供一个房产信息,我们满意就跟租赁、入住,如果我们不满意(抛出异常),房介就会帮我们做后续处理。整个过程不再是由我们控制,而是由房介这么一个容器去控制。所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

DI:IOC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? 有一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

--------------------------------------------------------------------------------------------------------------------------------------------

1、ajax局部刷新

2、跨域请求的三种方式:后台代理、jsonp(只适用于GET请求)、XMLHttpRequest Level2(IE10以上,其他浏览器)

3、cookie的跨域问题:请求的头部增加 P3P协议

4、HttpWebRequest类与HttpRequest类的区别。

  HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息。
而HttpWebRequest用于客户端,拼接请求的HTTP报文并发送等。HttpWebRequest这个类非常强大,强大的地方在于它封装了几乎HTTP请求报文里需要用到的东西,以致于能够能够发送任意的HTTP请求并获得服务器响应(Response)信息。采集信息常用到这个类。

5、HttpWebResponse类与HttpResponse类的区别
  HttpWebResponse类的作用用于在客户端获取返回的响应的信息,还记得HttpResponse类吗?你是否在写B/S程序的时候,经常用到Response.Write()呢?
  HttpResponse用于在服务器端设置服务端的响应信息,而HttpWebResponse类用于客户端获取服务器端返回的响应信息。这个类还是比较简单,还是可以照着以前的MSDN全部写一遍。

6、WebClient学习笔记 - [.Net开发] HttpClient
之前在做那个托福刷位程序时多次使用到HttpWebRequest与HttpWebResponse这两个类,也熟悉了这两个类的使用方法,再深入学习后发现WebClient也是一个很好的工具,对于网络应用有很大的用处,搜集了一些资料,总结下WebClient的使用方法。

一、WebClient概述

从MSDN中我们可以得知,WebClient的作用就是“Provides common methods for sending data to and receiving data from a resource identified by a URI.”也就是说我们可以通过这个类去访问与获取网络上的资源文件。

WebClient类不能被继承,在之前的.Net框架中我都是通过WebRequest和WebResponse这两个类来处理向URI标示的资源和获取数据了。觉得这两个类功能挺强大的,但不足之处的是利用WebRequest和WebResponse时设置过于复杂,使用起来颇为费劲。而WebClient可以理解为对WebRequest和WebResponse等协作的封装。它使人们使用起来更加简单方便,然后它也有先天不足的地方。那就是缺少对cookies/session的支持,用户无法对是否自动url转向的控制,还有就是缺少对代理服务器的支持等等,不过我们可以通过重写WebClient的一些方法来实现这些功能。 在做那个托福刷位程序时需要使用到cookies判断,所以使用WebRequest与WebResponse这两个类比较方便。

通过查看MSDN上的解释,我们可以初步了解WebClient的函数与基本用法。

WebClient提供四种将数据上载到资源的方法:
OpenWrite 返回一个用于将数据发送到资源的 Stream。
UploadData 将字节数组发送到资源并返回包含任何响应的字节数组。
UploadFile 将本地文件发送到资源并返回包含任何响应的字节数组。
UploadValues 将 NameValueCollection 发送到资源并返回包含任何响应的字节数组。
另外WebClient还提供三种从资源下载数据的方法:
DownloadData 从资源下载数据并返回字节数组。
DownloadFile 从资源将数据下载到本地文件。
OpenRead 从资源以 Stream 的形式返回数据。

二、WebClient与其他网络相关类的区别 WebClient和HttpWebRequst是用来获取数据的2种方式,一般而言,WebClient更倾向于“按需下载”,事实上掌握它也是相对容易的,而HttpWebRequst则允许你设置请求头或者对内容需要更多的控制,后者有点类似于form中的submit。虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程。

三、WebClient使用范例
正如前面所说,WebClient既能上传也能获取下载某个uri资源地址的内容,最后,简单的用一个例子来演示通过WebClient获取资源的方法:

关键的代码如下:
private void button1_Click(object sender, RoutedEventArgs e)
{
//通过WebClient方式去获取资源文件
Uri uri = new Uri("http://localhost:2052/Images/cnblogs.png", UriKind.Absolute);
WebClient webClient = new WebClient();
webClient.OpenReadAsync(uri);
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);

}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
Stream stream = e.Result;
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(stream);
this.image1.Source = bitmap;
}

如果是用WebRequest方式来获取资源的话,主要的代码如下:
private void Button_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest request =(HttpWebRequest) WebRequest.Create("http://localhost:2052/Images/cnblogs.png");
request.Method = "GET";
request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}
public void ReadCallback(IAsyncResult asyc)
{
HttpWebRequest request = (HttpWebRequest)asyc.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyc);

this.Dispatcher.BeginInvoke(() =>
{
Stream stream = response.GetResponseStream();
BitmapImage bitmap = new BitmapImage();
                bitmap.SetSource(stream);
this.image1.Source = bitmap;
}
);
}


四、备注
1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();
2,其Method指定了请求类型,这里用的GET,还有POST;也可以指定ConentType;
3,其请求的Uri必须是绝对地址;
4,其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法;
5,因为其回调不是UI线程,所以不能直接对UI进行操作,这里使用Dispatcher.BeginInvoke();

7、什么是URI,和URL有什么不同?

URI就是唯一标识符,比如五棵松体育馆,有这个资源
URL说明了可以找到这个资源的路径,如位于北京海淀区复兴路69号的五棵松体育馆不仅说明有这个资源,更能靠URL找到它。

URL: example.com/some/page.html
URI: some/page.html


8、http://jsonlint.com/在线json校验工具

知识点2