Popular blog tags

WebClient,HttpWebRequest,HttpClient,WebSocket,Socket该选谁?

Published

1.Socket,TCP,UDP,HTTP,WebSocket的区别

socket:TCP、UDP,HTTP 底层通信都是通过 socket 套接字实现 。

TCP,UDP:是一种传输方式,比如去北京,可以选择飞机、火车等交通方式。

HTTP,XMPP则是数据传输格式协议。 HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。

缺点:会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上

WebSocket:同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。  

 

 

2.HTTP系列演进

方式说明
HttpWebRequest.NET早期版本,同步方式(20210809更新:Net 5.x 已支持 https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.keepalive?view=net-5.0)
WebClientHttpWebRequest的封装简化版,同步方式.不建议使用 WebClient 类进行新开发。 请改用 System.Net.Http.HttpClient 类。public class WebClient : System.ComponentModel.Component
HttpClient.NET4.5以后,异步方式
HttpClientFactory.NET Core2.1

CHANGES SINCE .NET CORE 2.1

1.HttpWebRequest

HttpWebRequest实例对应于一个Url的一次请求.

public class HttpWebRequest : System.Net.WebRequest

2.HttpClient

微软在.NET Framework 4.5中为大家带来了System.Net.Http.HttpClient.HttpClient与众不同的地方是同一个HttpClient实例可以发出多次请求,每次请求是可以是完全不同的URL。

3.WebSocket

Prerequisites

ASP.NET Core 1.1 (does not run on 1.0)

Any OS that ASP.NET Core runs on:

Windows 7 / Windows Server 2008 and later

Linux mac OS

Exception: If your app runs on Windows with IIS, or with WebListener, you must use Windows 8 / Windows Server 2012 or later。For supported browsers, see http://caniuse.com/#feat=websockets.

When to use itUse WebSockets when you need to work directly with a socket connection. For example, you might need the best possible performance for a real-time game.ASP.NET SignalR provides a richer application model for real-time functionality, but it runs only on ASP.NET, not ASP.NET Core. A Core version of SignalR is under development; to follow its progress, see the GitHub repository for SignalR Core. https://github.com/aspnet/SignalR  .

.NET WebSocket 核心原理初体验

 

WebSocket抓包分析


建立连接的流程概述
步骤1:客户端和服务端完成三次握手建立TCP连接,这一点和HTTP协议没有差异

步骤2:由客户端发起HTTP请求,升级协议为WebSocket

步骤3:只需完成一次握手后,就可以实现客户端和服务端主动发送消息内容

步骤4:客户端发送关闭帧,关闭所有连接

                        
原文链接:https://blog.csdn.net/m0_59464259/article/details/120963829

WebSockets 

WebSockets is a bidirectional streaming protocol built on HTTP/1.1 and later adapted to HTTP/2.

SPDY

SPDY is the precursor to HTTP/2 and is commonly used in Kubernetes environments.

https://microsoft.github.io/reverse-proxy/articles/websockets.html

 

C# HttpListener

https://www.zetcode.com/csharp/httplistener/

 

C# HttpClient Series

  1. C# HttpClient Series:how to use HttpClient correctly in .Net core
  2. C# HttpClient Series:HEAD/GET/Post/authentication/json/DownLoad/ request
  3. C# HttpClient Series:Make HttpClient Request cookie like browser with c#
  4. C# HttpClient Series:HttpClient用HttpClientHandler添加Refer、Cookie及UserAgent请求头,解析中文GBk编码
  5. C# HttpClient Series:how to use HttpClient correctly in .Net core
  6. Make HTTP requests emulate a web browser using IHttpClientFactory in ASP.NET Core
  7. JavaScript深入之执行上下文
  8. JavaScript深入之闭包
  9. JavaScript深入之参数按值传递
  10. JavaScript深入之call和apply的模拟实现
  11. JavaScript深入之bind的模拟实现
  12. JavaScript深入之new的模拟实现
  13. JavaScript深入之类数组对象与arguments
  14. JavaScript深入之创建对象的多种方式以及优缺点
  15. JavaScript深入之继承的多种方式以及优缺点
  16. JavaScript深入系列15篇正式完结!
  17. JavaScript深入之浮点数精度
  18. JavaScript深入之头疼的类型转换(上)
  19. JavaScript深入之头疼的类型转换(下)