成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Http服務器實現文件上傳與下載(二)

網絡 網絡管理
在上一節中已經講到了請求頭字符串的解析,并且在解析中我我們已經獲取了url。就是上節中提到的/doing。當瀏覽器發送了/doing請求后,這是的與服務器的連接并沒有中斷,原因無他,就是瀏覽器等待接受服務端發來的信息,然后他對信息進行解析并顯示在瀏覽器界面上。

一、引言

在上一節中已經講到了請求頭字符串的解析,并且在解析中我我們已經獲取了url。就是上節中提到的/doing。當瀏覽器發送了/doing請求后,這是的與服務器的連接并沒有中斷,原因無他,就是瀏覽器等待接受服務端發來的信息,然后他對信息進行解析并顯示在瀏覽器界面上。在編寫Http服務器時的C/S結構時,我只編寫服務端server,客戶端直接用現成的瀏覽器即可。

當服務端找到瀏覽器需要的內容的時候,現在服務端就需要把內容發送給瀏覽器即可。但是在HTTP協議中,發送具體內容之前,服務端還是要發送一個響應頭,之前瀏覽器發送的叫做請求頭,那么服務端也要發送一個響應頭告訴瀏覽器,說你的請求我接受或者拒接。拒絕的話之后就沒有具體實體內容發送,否則再告訴瀏覽器說你請求的內容的格式是html或者text,或者是音頻等二進制文件等,并且告訴瀏覽器你請求內容的大小(這個非常重要)。當響應頭發送完畢后,如果是同意瀏覽器的請求的話,那么接著發送具體的內容即可,接著關閉這個鏈接。

二、HTTP協議

現在我們來看一下這個響應頭的一個例子,還是只說明一些我們現在需要知道的,其他內容讀者可以自己去查找相關的內容。

1 HTTP/1.1 200 OK
2 Server:(Unix)
3 Content-type:application/octet-stream
4 Content-length:65144369
5 Connection:Keep-Alive

在這個例子中的響應頭我們可以看到:

1)在***行就告訴瀏覽器http協議的版本是1.1,狀態碼是200,意思是OK,就是說你的請求我同意了。

2)在第二行就是告知瀏覽器我服務器的名字。

3)在第三行就是你請求的內容的格式是applicaiton/octet-stream,理解為二進制流即可。

4)在第四行說明你請求內容的大小,單位是字節。

5)第五行告訴瀏覽器是Keep-Alive連接方式。

在這個協議頭發送給瀏覽器時,還是每行結尾都有一個回車換行\r\n。***還是需要一個空行代表本響應頭結束。還有一些協議內容到用用到時再講,現在提出這幾項即可。當這個協議頭發送給瀏覽器后,瀏覽器對其解析。然后等待真正的請求內容。當服務端把瀏覽器的請求的具體內容發送完畢就關閉這個連接。

講到這里基本一個請求響應結束了。那在這里提一下如何處理大并發呢。其實在HTTP請求中,在每個URL請求中服務器并不關心一些請求是否來著同個瀏覽器,服務器做的只是有請求來臨就對其連接發送數據,然后關閉數據。盡管可能來著同一客戶端上的請求有數據上的關系,但是服務端只是在發送數據而已。所以對于同一個瀏覽器發送的多個請求和不同瀏覽器或者不同主機發送來的請求的對待都是一樣的。就是每個請求都是獨立的,并不關心這個邏輯關系。

在這一篇中的主要內容也就講完了,好像看起來比較短哦,哈哈。。。。。那么在講一些細節上的內容吧。

現在大并發的服務器linux中,主要在有線程,進程,select,poll,epoll的方式。這些方式在各個博客上都是有的,所以我并不想在解釋一下,讀者可以自己查詢其中的不同之處。而本文開發的HTTP服務器采用線程的方式進行。主要是當一個請求來到時,就創建一個線程來處理。采用的linux下POSIX標準pthtread線程。如果其他讀者可以采用其他的幾種方式來處理。或者自己寫個線程池來取代每次一個請求來創建一個線程。主要對其包裹在一個命名空間為MultiThread的線程Thread類中,接著是一些代碼段:

頭文件(include/thread.h):

 

1 /*
2 * include/thread.h
3 */
4
5 #ifndef THREAD_H_
6 #define THREAD_H_
7 #include
8 #include
9 namespace MultiThread {
10
11 class Thread {
12 public:
13 Thread();
14 ~Thread();
15 static int create_thread(pthread_t &pid,void* (*pFunc)(void *),void *arg);
16 int stop_thread();
17
18 };
19
20 } /* namespace MultiThread */
21
22 #endif /* THREAD_H_ */

 

cpp文件(src/thread.cpp)

 

1 /**
2 *
3 * src/thread.cpp
4 **/
5 #include "thread.h"
6 namespace MultiThread {
7
8 Thread::Thread() {
9 }
10
11 Thread::~Thread() {
12 }
13
14 int Thread::create_thread(pthread_t &pid,void* (*pFunc)(void *),void *arg) {
15 int ret=pthread_create(&pid,NULL,pFunc,arg);
16 if(ret==0)
17 std::cout<<"create_thread() ...succeed"<
18 else
19 std::cout<<"create_thread() ...failed"<
20 return ret;
21 }
22
23 int Thread::stop_thread() {
24 return 0;
25 }
26
27 } /* namespace MultiThread */

 

看到現在,大家一定發現stop_thread()為空,應為我到現在還沒用這個函數。并且到現在只用到create_thread函數,之后如果用到,接著在之后的文章中提出吧。

責任編輯:何妍 來源: 博客園
相關推薦

2015-10-08 09:38:24

HTTP網絡協議文件傳輸

2015-10-09 09:41:24

HTTP網絡協議文件傳輸

2015-10-10 16:46:14

HTTP網絡協議文件傳輸

2015-09-28 13:39:13

Http網絡協議HTTP

2020-12-02 11:48:05

TFTP

2019-04-23 10:48:55

HTTPTomcat服務器

2018-10-09 09:28:12

HTTPHTTP協作服務器

2011-08-18 16:03:34

iPhone上傳圖片

2022-03-01 20:33:50

服務web項目

2020-06-17 21:39:11

HTTP協議服務器

2010-05-25 13:20:46

http與svn

2017-11-10 08:58:49

Web服務器應用程序

2009-07-03 13:05:47

JSP HTTP服務器

2010-03-22 12:57:46

Java Socket

2018-06-15 10:25:43

Python HTTPFTP服務器

2018-12-06 09:23:33

2019-04-24 15:06:37

Http服務器協議

2009-07-06 17:25:22

JSP HTTP服務器

2018-01-19 10:30:48

HTTP服務器代碼

2019-07-04 15:00:32

PythonHTTP服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人免费视频在线观看 | www午夜视频 | 特级丰满少妇一级aaaa爱毛片 | 亚洲国产精品久久久久久 | 亚洲精品视频在线观看免费 | 亚洲欧洲av在线 | 成人在线网 | 欧美日韩亚洲三区 | 亚洲一区影院 | 97国产精品 | 中文字幕一区二区三区四区五区 | 人人爱干| 成人黄色网址大全 | 亚洲欧美日韩精品 | 亚洲精品久久久久久久久久久 | 一区二区三区欧美 | 日韩午夜网站 | 欧美片网站免费 | 综合久久一区 | 91玖玖| 国产欧美一级二级三级在线视频 | 日本久久久影视 | 亚洲成人激情在线观看 | 国产亚洲精品a | 国产精品大全 | 丝袜美腿一区二区三区动态图 | 亚洲精品久久久一区二区三区 | 蜜桃视频在线观看免费视频网站www | 日日操夜夜摸 | 日韩欧美精品 | 99精品国产一区二区三区 | 免费污视频 | 国产精品高潮呻吟久久久久 | 亚洲国产成人av好男人在线观看 | 亚洲日韩中文字幕一区 | 久久精品视频免费看 | 天天操天天射天天舔 | 日韩精品一区二区三区久久 | 久草在线 | 亚洲精品电影网在线观看 | 黄色片网站国产 |