1. 程式人生 > >對伺服器端程式設計的理解

對伺服器端程式設計的理解

伺服器端程式設計的本質用一句話來概括就是解決客戶端程序和服務端程序之間的通訊和資料交換問題。
下面我們就要思考兩個問題:
第一個是兩個程序如何通訊?
通常通過作業系統提供的socket系統呼叫來進行TCP連線。(IPC方法很多,並不只有socket)
第二個是如何保證雙方互相理解?
需要建立相應的規則,這也就是我們所謂的協議。

以Python web開發為例,一個http請求過程要經過:
瀏覽器—>web伺服器—>WSGI伺服器—->web 應用程式—->資料庫客戶端—->資料庫伺服器
瀏覽器本質是就是一個htttp客戶端,而web伺服器就是一個http服務端,通常web開發會通過閘道器協議來實現web伺服器和應用程式的解耦,以Python web開發為例,Python的閘道器協議為WSGI,真實環境中我們還需要一個將http請求解析為符合WSGI需求的資料結構(一個環境變數字典)的WSGI伺服器,則此時web伺服器就相當於WSGI客戶端,WSGI伺服器就是WSGI服務端,而web應用被WSGI伺服器呼叫,來處理http請求和生成響應的http應答,通常web應用需要操控資料庫進行增刪查改,而操控資料庫的本質就是建立一個數據庫的客戶端,將sql語句轉換為符合資料庫通訊協議的請求傳送給資料庫的服務端,服務端再生成響應的應答給應用程式,這就是通過程式語言對資料庫進行增刪查改的本質。

web框架和資料庫客戶端的本質:
web框架將解析和生成HTTP協議這個公共的,重複的過程自動化,使得web開發只需要用檢視函式建立URL和函式之間的對映關係,然後返回寫好的HTML檔案。
資料庫客戶端也是相似的,將生成和解析資料庫通訊協議的過程自動化,使得操控資料庫只用呼叫方法,並且寫入相應資料庫語句。

相關推薦

伺服器程式設計理解

伺服器端程式設計的本質用一句話來概括就是解決客戶端程序和服務端程序之間的通訊和資料交換問題。 下面我們就要思考兩個問題: 第一個是兩個程序如何通訊? 通常通過作業系統提供的socket系統呼叫來進

《網路遊戲伺服器程式設計》——學習筆記(day1)

宣告 本人萌新一枚,以後想進入遊戲開發行業,so,開始自學《網路遊戲伺服器端程式設計》一書,在部落格上寫筆記以記錄提取一些書中我自認為有用的知識點,如有侵權或者一些別的問題,請私信我,謝謝! 網路程式設計基礎 網路遊戲伺服器端開發概述 Client/Serve

伺服器程式設計心得(七)——開源一款即時通訊軟體的原始碼

        在我的《伺服器端程式設計心得》這個系列的第一篇至第六篇都是講了一些零散的不成體系的網路程式設計細節。今天,在這篇文章中,我將介紹一款我自主開發的即時通訊軟體flamingo(中文:火烈鳥),並開源其伺服器和pc客戶端程式碼。以此來對前幾篇文章中說到的理論進行實

伺服器程式設計心得(三)—— 一個伺服器程式的架構介紹

本文將介紹我曾經做過的一個專案的伺服器架構和伺服器程式設計的一些重要細節。 一、程式執行環境 作業系統:centos 7.0 編譯器:gcc/g++ 4.8.3     cmake 2.8.11 my

Linux下使用libevent庫實現伺服器程式設計

一、背景 TCP伺服器端一般用到非阻塞Socket、IO複用,Linux可以支援epoll、select,而Windows支援select、IOCP,考慮平臺適用性,需要對IO事件進行封裝相容; 二、相關知識 2.1 事件驅動(I/O複用) 服務端常用到的 select

賴勇浩:推薦《Linux 多執行緒伺服器程式設計

推薦《Linux 多執行緒伺服器端程式設計》 賴勇浩(http://laiyonghao.com)最近,有一位朋友因為工作需要,需要從網遊的客戶端程式設計轉向伺服器端程式設計,找我推薦一本書。我推薦了《Linux 多執行緒伺服器端程式設計——使用 muduo C++ 網路庫

關於伺服器程式設計的程式除錯心得

對某些需要在編譯以後放到伺服器端或者叢集執行的程式,在沒有除錯工具的情況下,解決問題的方法主要是通過輸出語句(將info輸出到日誌中),分為以下步奏: 1、對問題的定位 將程式分為幾大邏輯,根據順序逐個大邏輯進行測試(不要放過任何一部分,不要認為某個部分一定不會出錯,往往出

Golang 客戶伺服器的證書進行校驗(單向證書校驗)

[[email protected] ~]# echo "192.168.10.100   zigoo.com" >> /etc/hosts [[email protected] ~]# more /etc/hosts 127.0.0.1  

淺談網路遊戲的設計——伺服器程式設計

本遊戲伺服器端作業系統採用UNIX,因為UNIX是標準的伺服器作業系統,可保證網路遊戲的穩定性。因此,以下所有的程式設計都將針對UNIX進行。  伺服器端的整體構架如下:通訊模組,訊息傳遞模組,遊戲規則模組,執行緒管理模組,遊戲世界管理模組。 通訊模組: 通訊模組主要實現與客戶端的通訊功能,實際上

伺服器程式設計完整例項

專案結構 下面對每個包對應的邏輯和功能做簡要說明 com.bupt.dao:裡面是進行資料庫操作的相關介面。介面相當於一種規範,增加了系統的可測試性和健壯性,無論之後的daoImpl中的實現程式碼如何改變,只要介面不改變就不會影響程式的執行,降低了程式的耦合度,便於進行單

Android客戶程式通過Web Service實現伺服器資料庫的查詢

1.eclipse+webservice開發例項 http://blog.csdn.net/xw13106209/article/details/7049614/ 2.java通過JDBC連結SQLServer2012 http://blog.csdn.net/stewen_001/article/det

WEB客戶程式設計伺服器程式設計

一、HTTP協議事務處理過程: (1)建立連線。HTTP協議是一種無狀態協議,對於每一次請求都要求建立一個新的連線。 (2)傳送請求。客戶向伺服器傳送一個請求,請求某種型別的服務。 (3)提供服務。伺服器為這個HTTP請求提供服務,即開發人員編寫一個Servlet模組來處理這個HTTP請求。 (4)傳送響應

Linux多執行緒伺服器程式設計

目錄 Linux多執行緒伺服器端程式設計 執行緒安全的物件生命期管理 物件的銷燬執行緒比較難 執行緒同步精要 借shared_ptr實現寫時拷貝(copy-on-write)

移動適配自己的理解

data 標簽 自己的 html 手機 cep box on() 根據 在寫移動端H5頁面的時候,最讓人頭疼的就是適配問題: 接下來是我給我的最佳的解決方案和一個小例子 第一步:適配js(rem.js) /** *這裏我們提取了一個公式(rem表示基準值) *rem基準值

二分法的理解和關於結對程式設計的看法

二分法是運用分治策略的典型例子。它充分利用了元素間的次序關係。它的最壞情況是剛好元素按相反的順序排列了,此時用O(logn)時間完成搜尋任務。二分搜尋法的基本思想是將n個元素分成個數大致相同的兩半,取a[n/2]與x做比較,是就返回a[n/2]下標,否則,判斷a[n/2]和x相比誰更大,若a[n/2]大,就在

二分法的理解及組隊程式設計情況

對二分法的理解及組隊程式設計情況 一:對二分法的理解 1:關於二分法:二分法是一種典型的查詢演算法,是必須掌握的查詢方法之一;是運用分治策略的典型例子,也稱折半查詢,其時間複雜度為O(logN),是效率較高的一種查詢方法。 2:使用條件:儲存在陣列中的有序序列。 3:基本思想:(以非降序排序為例)將n

python寫簡單的web靜態伺服器socket的深入理解

import socket from multiprocessing import Process import time #...使用socket建立簡單的靜態伺服器 def func1(sock): # 子程序實現的功能 read_data = sock.recv(2

二分演算法的理解及結對程式設計情況

一、對二分演算法理解 二分演算法,又稱折半演算法,是應用分治策略的典型例子。二分查詢主要對有序序列進行對所指定數字的查詢,通過不斷縮小搜查範圍,在比較中間的數後對左右兩個陣列進行相同操作,以得到最終的帶查詢數字。時間複雜度logn,對陣列較大時能顯著提高程式效率。 二、演算法程式碼 #include &

tornado伺服器以JSON字串作為客戶的響應演示

# tornado伺服器以JSON字串作為對客戶端的響應演示 import json import tornado from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from tornado.o

Python下UDP的Socket程式設計伺服器因客戶的非正常退出而報錯?

伺服器端程式碼 import socket import threading import logging import datetime logging.basicConfig(format='%(message)s', level=logging.INFO) class ChatUd