主頁 > 企業開發 > Cesium中的圖形技術:Primitive API 高級

Cesium中的圖形技術:Primitive API 高級

2020-12-03 06:33:47 企業開發

官方雖然說文章已過時,且說 2018 年會更新文章的代碼,但是咕咕咕到了現在都沒更新,

Geometry and Appearances · CesiumGS/cesium Wiki (github.com)

創建自定義幾何圖形和外觀

Cesium支持許多常見的圖形,開箱即用,但是,有時候這些預置的圖形不一定能滿足需求,

由于 幾何 和 外觀 在 Primitive API 中是分離的,所以可以在外觀相同的時候添加幾何形狀,反之亦然,

這么做需要一定的圖形學知識,在這個教程中,將創建一個簡單的三棱錐,

如果你有更好的幾何圖形,可以參考官方 “貢獻說明” 來提交你的成果,

幾何圖形

Cesium 中的 Geometry 支持索引三角形、未索引三角形、線框渲染和點渲染,開始,我們先為四面體(三棱錐)創建它的幾何形狀,即四個等邊三角形,首先,在 Source/Core/ 下創建一個 TetrahedronGeometry.js

官方代碼是 AMD 格式的,我改為和 1.63 之后類似的風格,原文的代碼可以直接到文章頂部的原文鏈接找,

import Cartesian3 from './Cartesian3'
import ComponentDatatype from './ComponentDatatype'
import PrimitiveType from './PrimitiveType'
import BoundingSphere from './BoundingSphere'
import GeometryAttribute from './GeometryAttribute'
import GeometryAttributes from './GeometryAttributes'
import GeometryPipeline from './GeometryPipeline'
import VertexFormat from './VertexFormat'
import Geometry from './Geometry'

function TetrahedronGeometry() {
  const negativeRootTwoOverThree = -Math.sqrt(2.0) / 3.0;
  const negativeOneThird = -1.0 / 3.0;
  const rootSixOverThree = Math.sqrt(6.0) / 3.0;
  const positions = new Float64Array(4 * 3);
  
  // 四面體有4個三角形,共計12個點,但是由于重合的關系,可以只記錄4個點
  // 點0 坐標
  positions[0] = 0.0;
  positions[1] = 0.0;
  positions[2] = 1.0;

  // 點1 坐標
  positions[3] = 0.0;
  positions[4] = (2.0 * Math.sqrt(2.0)) / 3.0;
  positions[5] = negativeOneThird;

  // 點2 坐標
  positions[6] = -rootSixOverThree;
  positions[7] = negativeRootTwoOverThree;
  positions[8] = negativeOneThird;

  // 點3 坐標
  positions[9] = rootSixOverThree;
  positions[10] = negativeRootTwoOverThree;
  positions[11] = negativeOneThird;
  
  // 創建頂點屬性中的坐標
  const attributes = new GeometryAttributes({
    position : new GeometryAttribute({
      componentDatatype : ComponentDatatype.DOUBLE,
      componentsPerAttribute : 3,
      values : positions
    })
  });
  
  const indices = new Uint16Array(4 * 3);
  
  // 后面的三角形用到 0、1、2 號點坐標
  indices[0] = 0;
  indices[1] = 1;
  indices[2] = 2;

  // 左邊的三角形用到 0、2、3 號點坐標
  indices[3] = 0;
  indices[4] = 2;
  indices[5] = 3;

  // 右邊的三角形用到 0、3、1 號點坐標
  indices[6] = 0;
  indices[7] = 3;
  indices[8] = 1;

  // 下面的三角形用到 2、1、3 號點坐標
  indices[9] = 2;
  indices[10] = 1;
  indices[11] = 3;
	
  // 指定此四面體的各種屬性
  this.attributes = attributes;
  this.indices = indices;
  this.primitiveType = PrimitiveType.TRIANGLES;
  this.boundingSphere = undefined;
}

export default TetrahedronGeometry

譯者注:很明顯,這是一個死資料的幾何形狀,不具備任何引數化建模(例如我能外部傳入資料)的能力,但是這作為演示足夠了

四面體由四個頂點組成,其所有點都在半徑為1的球面上,為了表達精度,坐標存盤在 Float64Array 這個型別陣列中,下圖是示意圖(區域坐標)

四面體的有三個三角形面,每個三角形的點有三個,使用坐標陣列中的序號來表達,稱之為索引值,來節約記憶體,

對于這個四面體,每個頂點均被索引了三次(三個三角形共用一個頂點),索引陣列可以存在 Uint16Array 中,也可以存在 Uint32Array 中,如果頂點數量超過 64K 個,可考慮用后者,

“Back” 三角形這兒有個藍箭頭,表示的是頂點的順序,現在是逆時針,使用右手定則,可以判斷它的這個三角形的“外面”是朝向螢屏的,Cesium 使用逆時針順序來定義三角形的面朝向,

四面體類需要分配四個屬性,這是 Geometry 必須的:

this.attributes = attributes;
this.indices = indices; // 可選
this.primitiveType = Cesium.PrimitiveType.TRIANGLES;
this.boundingSphere = undefined; // 可選
  • attributes - 一個 GeometryAttributes 物件,每個頂點屬性都存盤在這個物件中,頂點屬性包括但不限于:坐標、法線、顏色值、uv等
  • indices - 索引陣列,使用索引可以減少坐標個數,節約記憶體
  • primitiveType - 幾何圖元的型別,這里使用了 Cesium.PrimitiveType.TRIANGLES,即每三個頂點被決議為一個三角形渲染,
  • boundingSphere - 可選引數,包圍整個幾何形狀的球體,可以輔助剔除來提高性能,

① 包圍球

可以通過計算 boundingSphere 來提高繪制四面體的性能,

this.boundingSphere = BoundingSphere.fromVertices(positions);

BoundingSphere 有一個 fromVertices() 函式來計算緊密包圍幾何形狀所有坐標的包圍球,不過,通常在其他情況下,可以用簡單的幾何知識來更快創建它,由于預先知道這個四面體的頂點坐標位于半徑為1的球體上,所以可以用半徑為1的球面作為邊界球:

this.boundingSphere = new BoundingSphere(new Cartesian3(0.0, 0.0, 0.0), 1.0);

② 使用 Primitive API 繪制一個四面體

這個四面體的幾何中心作為區域坐標原點,為了讓它得以可視化,需要計算一個模型矩陣,用以定位和放縮它,此外,因為它只有坐標,且暫時只打算使用平面陰影,所以暫時不需要法線,

首先,構建源代碼并啟動本地 Cesium 開發環境

譯者注:直接把上面這個類寫在沙盒中更快且省事,方便修改

隨后,打開沙盒,寫一些代碼:

const widget = new Cesium.CesiumWidget('cesiumContainer');
const scene = widget.scene;
const ellipsoid = widget.centralBody.ellipsoid;

// 看似復雜,其實只是對經緯度 (-100, 40) 這個點做垂直地表向上平移200km的計算,并將幾何體放大50w倍(即變成500km那么大),回傳矩陣而已
const modelMatrix = Cesium.Matrix4.multiplyByUniformScale(
    Cesium.Matrix4.multiplyByTranslation(
        Cesium.Transforms.eastNorthUpToFixedFrame(ellipsoid.cartographicToCartesian(
            Cesium.Cartographic.fromDegrees(-100.0, 40.0))), // e-n-u計算,回傳區域到世界坐標的轉換矩陣
        new Cesium.Cartesian3(0.0, 0.0, 200000.0)), // 平移計算,矩陣·平移向量
    500000.0); // 縮放計算,矩陣·50w

const instance = new Cesium.GeometryInstance({
    geometry : new Cesium.TetrahedronGeometry(), // 如果直接寫在代碼而不是構建出來的,可以直接 new TetrahedronGeometry()
    modelMatrix : modelMatrix,
    attributes : {
        color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE) // 快捷計算頂點顏色
    }
});

/* 使用 Primitive API 繪制幾何 */
scene.primitives.add(new Cesium.Primitive({
    geometryInstances : instance,
    appearance : new Cesium.PerInstanceColorAppearance({
        flat : true,
        translucent : false
    })
}));

然后,它大概會長這樣:

因為設定了 appearance 中的 flat: true,沒有陰影,所以很難觀察三角面,如果想看到線框圖,可以改 TetrahedronGeometry 物件的 primitiveType 為 LINE,

使用 GeometryPipeline 類做這個轉換作業會比較方便,

GeometryPipeline.toWireframe 方法將幾何圖形轉換為 primitiveType 為 LINE 的模式,

稍作修改創建 GeometryInstance 的代碼:

const instance = new Cesium.GeometryInstance({
  geometry : Cesium.GeometryPipeline.toWireframe(new Cesium.TetrahedronGeometry()),
  modelMatrix : modelMatrix,
  attributes : {
    color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)
  }
});

如圖所示:

③ 添加法線出現陰影

要想外觀看起來有陰影,Geometry 的頂點屬性中必須擁有法線,三角形的法線是垂直于三角面的單位向量:

在圖形學中,通常法線是指每個頂點的法線,頂點的法線是這么定義的:頂點的法線是所有與它有關的面的法線的加和,并且必須是單位向量,下圖所示:

修改 TetrahedronGeometry 類,使用 GeometryPipeline.computeNormal 方法可以計算它的每個頂點的法線:

// ... 上面省略
const boundingSphere = new BoundingSphere(new Cartesian3(0.0, 0.0, 0.0), 1.0);

// 主要是改這里
const geometry = GeometryPipeline.computeNormal(new Geometry({
  attributes: attributes,
  indices: indices,
  primitiveType: PrimitiveType.TRIANGLES,
  boundingSphere: boundingSphere
}));

this.attributes = geometry.attributes;
this.indices = geometry.indices;
this.primitiveType = geometry.primitiveType;
this.boundingSphere = geometry.boundingSphere;

繼續執行代碼,圖形就變成了這樣:

這并不是想象中的樣子,

為了更好地觀察為什么會這樣,不如把頂點的法線可視化出來,使用 createTangentSpaceDebugPrimitive 這個全域函式即可,修改沙盒中的代碼:

scene.primitives.add(Cesium.createTangentSpaceDebugPrimitive({
  geometry: tetrahedron,
  modelMatrix: modelMatrix,
  length: 0.2
}));

你就會看到頂點的法線了:

可以看到,這些頂點的法線因為是各個三角面的法線的矢量和,看起來就不是那么”法線“了,

通常,一個頂點附近的面大致接近平行的話,用這些平面的法線矢量和作為頂點的法線,會使得頂點附近的顏色看起來很光滑過渡,但是,像這種十分尖銳的形狀,就不應該使用索引式頂點了,而是每個面的頂點單獨使用,每個頂點的法線自己獨立,

所以為了使得陰影看起來常規一些,必須使用獨立頂點的三角形,即四面體一共4個三角形,一共12個頂點,如圖:

再次修改 TetrahedronGeometry 類:

var positions = new Float64Array(4 * 3 * 3); // 4個三角形,每個有3個坐標,一個坐標有3個float分量
// back triangle
positions[0] = 0.0;
positions[1] = 0.0;
positions[2] = 1.0;
positions[3] = 0.0;
positions[4] = (2.0 * Math.sqrt(2.0)) / 3.0;
positions[5] = negativeOneThird;
positions[6] = -rootSixOverThree;
positions[7] = negativeRootTwoOverThree;
positions[8] = negativeOneThird;

// left triangle
positions[9] = 0.0;
positions[10] = 0.0;
positions[11] = 1.0;
positions[12] = -rootSixOverThree;
positions[13] = negativeRootTwoOverThree;
positions[14] = negativeOneThird;
positions[15] = rootSixOverThree;
positions[16] = negativeRootTwoOverThree;
positions[17] = negativeOneThird;

// right triangle
positions[18] = 0.0;
positions[19] = 0.0;
positions[20] = 1.0;
positions[21] = rootSixOverThree;
positions[22] = negativeRootTwoOverThree;
positions[23] = negativeOneThird;
positions[24] = 0.0;
positions[25] = (2.0 * Math.sqrt(2.0)) / 3.0;
positions[26] = negativeOneThird;

// bottom triangle
positions[27] = -rootSixOverThree;
positions[28] = negativeRootTwoOverThree;
positions[29] = negativeOneThird;
positions[30] = 0.0;
positions[31] = (2.0 * Math.sqrt(2.0)) / 3.0;
positions[32] = negativeOneThird;
positions[33] = rootSixOverThree;
positions[34] = negativeRootTwoOverThree;
positions[35] = negativeOneThird;

var indices = new Uint16Array(4 * 3); // 12個頂點索引,各自獨立

// back triangle
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;

// left triangle
indices[3] = 3;
indices[4] = 4;
indices[5] = 5;

// right triangle
indices[6] = 6;
indices[7] = 7;
indices[8] = 8;

// bottom triangle
indices[9] = 9;
indices[10] = 10;
indices[11] = 11;

現在,仍舊使用 GeometryPipeline.computeNormal 來計演算法線省的自己燒腦,最終,繪制的新四面體如下:

現在,每個三角形的陰影看起來就像正常的了,而不是在頂點附近”生硬“地”光滑過渡“,也看到了頂點的法線,同一個三角形的三個頂點法線是跟面的法線平行的,

至此,繪制算結束了,

④ 使用 WebWorker

對幾何圖形的計算可以使用 WebWorker 技術異步進行,使得界面保持回應,四面體可能比較簡單,計算量少,但是對于復雜的幾何體就很難說了,可以使用 Cesium 內置的 WebWorker,

首先,你得在 Source/Workers 目錄下創建一個 createTetrahedronGeometry.js 檔案,寫一個函式來創建 Geometry,

譯者注:已改為 es6 風格

import TetrahedronGeometry from '../Core/TetrahedronGeometry' // 這個看你喜好咯
import PrimitivePipeline from '../Scene/PrimitivePipeline'
import createTaskProcessWorker from './createTaskProcessWorker' // 使用 Cesium 內置的工具函式

function createTetrahedronGeometry(parameters, transferableObjects) {
  const geometry = TetrahedronGeometry.createGeometry();
  PrimitivePipeline.transferGeometry(geometry, transferableObjects);

  return {
    geometry : geometry,
    index : parameters.index
  };
}
export default createTaskProcessWorker(createTetrahedronGeometry)

此時,TetrahedronGeometry 類還沒有 createGeometry() 方法,修改使其擁有:

TetrahedronGeometry.createGeometry = function() {
  return new Geometry({
      attributes : attributes,
      indices : indices,
      primitiveType : PrimitiveType.TRIANGLES,
      boundingSphere : new BoundingSphere(new Cartesian3(0.0, 0.0, 0.0), 1.0)
  });
};

最后,加上一句代碼使得內置的 WebWorker 可以識別:

this._workerName = 'createTetrahedronGeometry';
// this 指的是 TetrahedronGeometry 

這些修改就能使用上面的代碼異步生成四面體了,當然,你依舊可以使用 createGeometry() 方法同步生成四面體,

至此,自定義幾何圖形的生成教程結束,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/228810.html

標籤:GIS

上一篇:Cesium中的圖形技術:Primitive API 簡介

下一篇:【Cesium 歷史博客】多視錐體優化:使用對數深度快取

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more