HTTP服务器
文章平均质量分 78
Anlige
啥都不会,啥也会点。
展开
-
C#实现WebSocket服务器:(05)实现聊天室-前端部分
这两篇文章主要是对我们前面对WebSocket协议的实现,通过自定义payload内容实现一个简单的聊天室。可以实现多聊天室、聊天室切换功能,后端代码都实现了,只是我们前端没去实现。原创 2021-09-16 23:02:17 · 2403 阅读 · 0 评论 -
C#实现WebSocket服务器:(04)实现聊天室-协议和后端部分
从后台到前端,实现一个简单的聊天室,实现效果:`用户登录`、`发送消息`、`接收消息`、`用户离开`。大部分逻辑是基于Text消息类型,将具体的消息封装成`JSON`字符串在客户端和服务器间传送。原创 2021-09-16 22:13:32 · 861 阅读 · 0 评论 -
C#实现WebSocket服务器:(01)握手
WebSocket的握手是基于HTTP的,HTTP请求的Connection标头值为Upgrade,Upgrade标头的值为websocket,即表示当前请求为WebSocket握手请求。原创 2021-09-09 17:06:57 · 1467 阅读 · 0 评论 -
C#实现WebSocket服务器:(02)消息帧分析和代码实现
前文我们介绍了WebSocket的握手:C#实现WebSocket服务器:(01)握手握手完成后,即可客户端和服务端双方即可进行消息的收发。WebSocket消息的收发是以帧为单位的。0、WebSocket的帧帧类型Op常用帧类型有以下六种:值类型说明0x00Continuation后续帧,当一个帧是非结束帧的时候,后续帧会被标记为Continuation,应用程序需要一直读下一个帧,直到读到结束帧。0x01Text数据帧:文本,说明帧的Payload为文本经原创 2021-09-10 16:01:19 · 2453 阅读 · 0 评论 -
C#实现WebSocket服务器:(03)消息收发的封装
前文我们实现了WebSocket消息的读取和发送:C#实现WebSocket服务器:(02)消息帧分析和代码实现但是我们所有的逻辑都是写在OnWebSocket方法的,并不方便扩展,现在我们封装一个Messager抽象类,封装消息的读取和发送。Messager类封装我们将在类中暴露一些必要的方法。下面我们用消息这个词,而不是帧,因为一条消息可能是由多个帧(例如Text帧+N个Continuation帧)组成的。方法说明Accept在OnWebSocket方法中,调用具体Mes原创 2021-09-11 15:40:36 · 5662 阅读 · 0 评论 -
C#实现HTTP服务器:(10)处理文件上传
主要实现对HTTP文件上传的协议分析、请求实体编码分析和请求实体的解析,同时把文件保存到临时目录。原创 2021-09-09 14:36:06 · 3409 阅读 · 0 评论 -
C#实现HTTP服务器:(9)在一个Socket连接内处理多个HTTP请求
前面的文章,我们处理请求都是在一个连接上的,请求处理完,就关闭Stream,同时关闭了底层的Socket。如果一个网页包含的资源比较多,总共可能会需要发起几十上百个Socket连接,造成不必要的网络消耗(TCP的握手、挥手)。同时,浏览器都一个网站发起的连接数是有限制的,所以会导致页面资源加载缓慢的问题。我们来一步步解决这个问问,使一个连接可以处理多个请求。......原创 2021-09-06 17:52:29 · 2272 阅读 · 0 评论 -
C#实现HTTP服务器:(8)解析查询参数和HTTP请求实体
HTTP请求实体的界定:Content-Length、Transfer-Encoding。通过实现一个读取请求实体的Stream来读取整个实体,然后转换成指定编码的文本,再进行解析。原创 2021-09-06 11:15:24 · 1946 阅读 · 3 评论 -
C#实现HTTP服务器:(7)使用缓冲区优化对HTTP请求头的解析
实现一个继承NetworkStream的类BufferedNetworkStream,重写NetworkStream的Read和ReadByte方法,在我们重写的类中,使用一个大的缓冲区来存储数据,供下游应用使用,不再频繁调用基础设施的读取方法原创 2021-09-04 22:14:36 · 934 阅读 · 0 评论 -
C#实现HTTP服务器:(6)将一个JS文件Gzip压缩后,使用Transfer-Encoding标头发送到客户端
实现JS文件压缩传输。原创 2021-09-03 23:35:27 · 689 阅读 · 0 评论 -
C#实现HTTP服务器:(5)压缩传输(GZip,Deflate)
在传输数据的基础上,我们再对数据进行压缩,C#有对这两种压缩算法的实现。即位于`System.IO.Compression`命名空间下的`GZipStream`和`DeflateStream`。这里只讲怎样使用Gzip压缩数据,分别用`Content-Length`和`Transfer-Encoding`两种传输方式实现。原创 2021-09-03 21:19:30 · 2461 阅读 · 0 评论 -
C#实现HTTP服务器:(4)使用Transfer-Encoding标头向客户端发送响应
基于前面封装的响应应答器,尝试使用Chunked方式,向浏览器发送响应。原创 2021-09-03 17:51:26 · 1096 阅读 · 0 评论 -
C#实现HTTP服务器:(3)封装用于响应请求的应答器
为了方便后续处理各种HTTP响应,封装一个简单的应答器,作为各种响应类型的父类。应答器内部会自动生成HttpResponse,并暴露出HttpResponse和一些常用的接口。原创 2021-09-03 17:30:29 · 1321 阅读 · 0 评论 -
C#实现HTTP服务器:(2)向客户端发送Hello World
前面文章实现了HTTP请求头的解析,现在我们尝试向浏览器发送一些内容。原创 2021-09-03 14:07:29 · 2457 阅读 · 0 评论 -
C#实现HTTP服务器:(1)解析HTTP请求头
实现一个HTTP服务器监听的类,并尝试解析浏览器发送来的HTTP请求头。原创 2021-09-03 12:37:21 · 3824 阅读 · 0 评论