網絡編程的重要性不低於數據庫操做,並且二者一般是同時存在,好比用python寫一個爬蟲程序,最終抓取的數據保存入庫,寫了一個web項目,用戶註冊,登陸,提交訂單等數據最終也要保存到咱們的數據庫中,可見網絡編程的重要性。因此我會拿出三講的時間,分別介紹python中socket編程,爬蟲和web服務器。 和你們一塊兒理解網絡編程。python
學完這次課程,咱們可使用socket創建一個簡易的socket服務器和socket客戶端,而且能夠進行通訊。linux
5-10分鐘web
socket翻譯過來稱爲套接字,是一個基本的網絡組件,過於詳細的介紹你們能夠百度一下,不在這裏說了,只講幾個項目中的重點:socket提供長鏈接,創建兩個點之間的信息通道;須要編寫socket服務器端和socket應用端,能夠理解爲聊天程序的服務器和聊天程序的客戶端。ajax
想一下如何實現一個web聊天程序?若是沒有websocket的相關知識,會不會很low的用ajax實現?每隔5秒請求一次服務器看有沒有消息返回。這樣作的缺點很明顯:死循環,無限請求服務器,對服務器壓力增大。實時性差,沒法第一時間收到消息,須要等待下次循環。數據庫
看一下Ajax方式的示意圖:編程
有了socket這個問題就能夠迎刃而解,首先客戶端與服務端創建長連接,服務器能夠接受信息,也能夠主動推送信息給已鏈接的客戶端程序,而客戶端能夠主動發送給服務器信息,也能夠被動的接受服務器的推送信息。服務器
看一下Socket方式示意圖:websocket
很明顯socket和http相比是長連接,雙向通訊,11點58分11秒客戶端1給服務器發送了一條信息,服務器接收後當即推送給客戶端2,客戶端2經過接受方法,處理信息,顯示給用戶,優勢是否是很明顯?趕忙學習一下如何使用吧。網絡
上面已經說過socket要編寫服務端和客戶端的程序,那咱們先寫一下用於監聽的服務端:socket
注意點:
第一步:建立socket連接
s = socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
AF_INET:使用ipv4的方式通信,默認便可。
type:SOCK_STREAM 是 TCP方式, SOCK_DGRAM 是 UDP方式連接,關於tcp和udp的協議理解你們記住TCP數據傳輸可靠,效率低於UDP。相反UDP不確保數據是否傳輸成功,效率高。
第二步:bind()函數,綁定ip地址和端口號,linux下端口號小於1024的爲系統保留,使用須要root權限,爲了保證程序正常運行,最好使用1024以上的端口。
第三步:list()函數,設置容許排隊等待連接的數量,因爲accept爲阻塞方法,因此要設置等待連接的數量,後面咱們會講如何解決阻塞。
第四步:接收信息,輸出信息。
看一下客戶端的代碼:
客戶端相對來講比較簡單,建立連接後,使用connect()連接服務器便可。
看一下運行結果:
服務端打印出客戶端發來的信息Hello,而客戶端輸出了 服務端返回的信息。
使用python實現一個socket服務器就是這麼簡單,其餘功能也是在這個基礎上來實現,無非是接受,轉發,處理各種消息。
今天咱們學習了,Python中的socket,瞭解瞭如何創建一個socket服務器程序,以及客戶端如何編寫,瞭解了總體的流程,後期咱們會在這個基礎上結合wxpython來實現一個聊天軟件。
接下來,咱們會學習一下大名鼎鼎的爬蟲,經過python如何快速實現一個簡易爬蟲。