1. 程式人生 > >UDP和多執行緒伺服器

UDP和多執行緒伺服器

UDP:

UDP是資料報文傳輸協議,這個傳輸協議比較野蠻,傳送端不需要理會接收端是否存在,直接就傳送資料,不會像TCP協議一樣建立連線。如果接收端不存在的話,傳送的資料就會丟失,UDP協議不會去理會資料的安全性,而且在網路繁忙、堵塞的時候會丟失一些資料,俗稱“丟包”。

但是UDP協議的傳輸速度很快,基本是你的網路有多快就傳輸多快。所以遊戲、直播、語音電話等功能都是得靠UDP來實現 ,TCP都是基於UDP開發的,就是在UDP上增加了各種安全措施保護了資料的安全,犧牲了傳輸的速度。 UDP傳輸資料的方式是把資料分成一個個的資料包,每個包都會限制資料的大小。

學習UDP的傳輸,我們需要用到兩個類:DatagramSocket和DatagramPacket類,和TCP裡學過的不一樣的一點是DatagramSocket既可以做接收端,也可以做傳送端。接收端需要宣告埠號,傳送端則不需要宣告ip地址和埠號。接收端會有一個空的資料包,用來接儲存傳送端發過來的資料。傳送端則是將資料包裝成一個數據包,然後宣告對方的ip地址和埠號接著就能將資料傳送過去了。 示意圖

: image

傳送端程式碼示例:

image

接收端也可以限制IP的,設定成只接收某個IP的資料:

image

接收端程式碼示例:

image

執行結果:

image

多執行緒伺服器:

到此之前我們編寫的都是單執行緒的伺服器端,單執行緒的伺服器有一個壞處就是,在多人同時訪問的時候會很緩慢。例如做個試驗:在單執行緒的伺服器端呼叫sleep方法讓執行緒休眠3秒鐘,然後執行伺服器端,接著開啟幾個瀏覽器同時進行訪問,會發現第一個瀏覽器停頓了3秒左右,第二個瀏覽器停頓了6秒左右,第三個瀏覽器停頓了9秒左右,這樣以此類推的話速度實在太慢不忍直視。所以這時候就需要用到多執行緒來編寫多執行緒伺服器了,多執行緒就能同時的進行處理訪問的客戶端,而且在真正的開發中也不可能會用到單執行緒的伺服器。

TCP多執行緒伺服器程式碼示例:

image image

執行結果:

image image

UDP多執行緒伺服器程式碼示例:

image image

執行結果: image image

從執行結果可以看出來這種來一個執行緒開一個執行緒的方式的弊端,就是會開啟無數個執行緒,導致資源佔用很大。

執行緒池伺服器: 所以這時候我們就需要用到執行緒池了,執行緒池能很好的管理執行緒資源,能夠限制住不會導致資源佔用很大。 TCP執行緒池伺服器程式碼示例: image image

執行結果:

image image

UDP執行緒池伺服器程式碼示例: image

執行結果: image image

從執行結果可以看出,使用執行緒池能夠控制好執行緒的開啟數量,從而不會導致執行緒的濫用,在計算機上的資源佔用也就不會那麼嚴重了。在開發中儘量使用執行緒池來編寫多執行緒伺服器,不使用執行緒池的話弊端很大。

相關推薦

UDP執行伺服器

UDP: UDP是資料報文傳輸協議,這個傳輸協議比較野蠻,傳送端不需要理會接收端是否存在,直接就傳送資料,不會像TCP協議一樣建立連線。如果接收端不存在的話,傳送的資料就會丟失,UDP協議不會去理會資料的安全性,而且在網路繁忙、堵塞的時候會丟失一些資料,俗稱“丟包”。

python學習之使用UDP執行實現一個群聊天室

        在學習UDP的時候,想著試一試能不能搞一個命令視窗的udp聊天工具,因為udp的廣播機制,所以就想著乾脆直接搞一個群聊的吧。不過最後搞來搞去,命令視窗下使用多執行緒,沒有做出什麼好看整潔的“圖形化”介面,湊合著用吧,畢竟是一個練習的學習型的小玩意。有時間把列印

網路程式設計實驗四——利用程序執行實現伺服器端的併發處理

一、實驗目的 1.在TCP檔案傳輸程式碼的基礎上,利用多程序實現伺服器端的併發處理。  2.利用多執行緒實現伺服器端的併發處理。 二、實驗原理 併發的面向連線伺服器演算法: 主1、建立套接字並將其繫結到所提供服務的熟知地址上。讓該套接字保持為無連線的。 主2、將

網路程式設計——4.利用程序執行實現伺服器端的併發處理

一、實驗要求     在TCP檔案傳輸程式碼的基礎上,利用單執行緒程序併發模型和多執行緒併發模型實現伺服器端的併發處理。 二、實驗分析     多執行緒與多程序相比,使用多執行緒相比多程序有以下兩個優點:更高的效率和共享儲存器,效率的提高源於上下文切換次數的減少。

Linux網路程式設計【三】:TCP伺服器程序執行(http訪問)版本

為了讓伺服器同時接受多個客戶端訪問,所以需要多程序或者多執行緒 多程序版本: #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<sys/types.h

【Linux】高併發伺服器模型(程序模型執行模型)

多程序併發伺服器 使用多程序併發伺服器時要考慮以下幾點:             1.      父程序最大檔案描述個數(父程序中需要close關閉accept返回的新檔案描述符)             2.      系統內建立程序個數(與記憶體大小相關)      

使用libevent執行構建高效能伺服器(客戶端)

有問題可以聯絡我[email protected]     因為開發資料庫叢集,節點需要通訊,必須構建基於socket的C++網路通訊系統。多年前使用UPD寫過P2P流媒體,但是現在需要TPC,首先使用了Nanomsg作為網路庫,但是開發過程中發現其不靠譜(模式太

Linux 網路程式設計 全解(四)--------程序併發伺服器執行併發伺服器

寫在前面:這個系列也是停滯了20多天了,從今天開始再次步入正軌,以後每個週末都會陸陸續續的更新,這個系列預計完結的時間還會在大約一個月左右,今天靜下心來多整理幾篇。QQ:993650814 正文: 一、多程序併發伺服器     設計思路:當有新的客戶端連線到

【網路】實現簡單的TCP、UDP伺服器、TCP程序/執行伺服器

1.0 一個簡單的TCP伺服器(只服務一個客戶端) 先看程式碼如下: server.c #include<stdio.h> #include<stdlib.h> #include<string.h> #includ

程序、執行執行基本概念

程序、執行緒和多執行緒基本概念 一、概念 1、程序(process) 狹義定義:程序就是一段程式的執行過程。 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

程序執行的優缺點

在Linux下程式設計多用多程序程式設計少用多執行緒程式設計。          IBM有個傢伙做了個測試,發現切換執行緒context的時候,windows比linux快一倍多。進出最快的鎖(windows2k的

關於程序,執行程序執行的網路程式設計

程序執行緒網路 多工程式設計 : 可以有效的利用計算機資源,同時執行多個任務 程序 : 程序就是程式在計算機中一次執行的過程 程序和程式的區別: 程式是一個靜態檔案的描述,不佔計算機的系統資源 程序是一個動態的過程,佔有cpu記憶體等資源,有一定的生命週期 * 同一個程式的不同執行過程即為不同的程序

Qt TCP通訊,執行伺服器

相信許多初學Qt的同學都會和我一樣遇到這樣的問題: 一、Qt TCP通訊在使用nextPendingConnect後,伺服器端就只會與最後接入的客戶端通訊,這個時候就會考慮繼承QThread實現多執行緒,從而實現多個客戶端與伺服器端通訊,每當一個新的客戶端連線時,通過標識碼socke

Python之——Python中的程序執行

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83042246 一、多程序 Python實現對程序的方式主要有兩種,一種方法是使用os模組中的fork方法,另一種方法是使用multiprocessing模組。區別在於:

《Java》Java“定時器執行”實際應用——執行同步

一、任務目標     將任務<Java“定時器和多執行緒”實際應用——定時器配合多執行緒>中的兩個執行緒修改為互斥的,以保證兩個執行緒不會同時對此類屬性x進行修改。   二、執行緒同步機制     在Java中提供了同步機制,可以有效地防止資源衝突。同步機制使用 sy

《Java》Java“定時器執行”實際應用——定時器配合執行

一、任務目標     完成一個java application應用程式,此應用程式公共類有一個double型類屬性(變數)x,初始值為0;在應用程式主程序中新開兩個執行緒,這兩個執行緒都進行死迴圈;第1個執行緒每隔300ms啟用一次,令類屬性x自加1.0並輸出顯示;第2個執行緒每隔400

Linux程序執行的優缺點

教科書上最經典的一句話是“程序是作業系統分配的最小單位,執行緒是CPU排程的最小單位”。 多執行緒的優點: 1)它是一種非常”節儉”的多工操作方式。在Linux系統下,啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,這是一種”昂貴”

用 threading 寫執行伺服器

import socket import threading   server = socket.socket() server.bind(("127.0.0.1",8899)) server.listen(1000)   def func(conn):   while T

執行:執行建立3種方式(一)

執行緒  鎖Synchronized  搞明白 執行緒 鎖和多執行緒系列 1.執行緒建立 執行緒建立常見的三種方式: 繼承Thread類 實現Runnable介面

執行:鎖的5種分類(三)

重入鎖  中斷鎖  公平鎖  讀寫鎖  自旋鎖    1.重入鎖 2.中斷鎖 3.公平鎖 4.讀寫鎖