雜項

一.什麼是RPC

RPC(Remote Procedure Call)中文名「遠程過程調用」。我們拆開理解下,「過程」也叫方法或函數,「遠程」就是說方法不在當前進程裏,而是在其他進程或機器
上面,合起來 RPC 就是調用其他進程或機器上面的函數。

在沒有網絡的時代,程序都是單機版的,所有邏輯都必須在同一個進程裏。進程之間就像高樓大廈裏面陌生的鄰居,大家無法共享,遇到同樣的功能只能重複實現一次。
顯然進程的障礙是逆天的,不符合先進生產力的發展方向,這個時候「進程間通信」的需求出現了,大家要求進程之間能夠相互交流,相互共享和調用。這樣再寫程序,
就可以利用進程間通信機制來調用和共享已經存在的功能了。隨着網絡的出現,進程的隔閡進一步消除,不光同一棟樓裏的鄰居可以共享資源,其他小區、甚至其他城
市的居民都可以通過互聯網互相調用,這就是 RPC。概念很容易理解,但是遠程和本地的實現原理有很大區別,架構設計者的職責就是設計一個機制讓遠程調用服務就
像調本地服務一樣簡單,這就是 RPC 框架。

二.
RPC 首要解決的是通訊的問題,主流的 RPC 框架分爲基於 HTTP 和基於 TCP 的兩種。
基於 HTTP 的 RPC 調用很簡單,就和我們訪問網頁一樣,只是它的返回結果更單一(JSON 或 XML)。它的優點在於實現簡單,標準化和跨語言,比較適合對外提供 OpenAPI 的場景,
而它的缺點是 HTTP 協議傳輸效率較低、短連接開銷較大(HTTP 2.0 後有很大改進)。

而基於 TCP 的 RPC 調用,由於 TCP 協議處於協議棧的下層,能夠更加靈活地對協議字段進行定製,減少網絡開銷,提高性能,實現更大的吞吐量和併發數。但是需要更多地關注底
層複雜的細節,跨語言和跨平臺難度大,實現的代價更高,它比較適合內部系統之間追求極致性能的場景。

接下我講的 RPC 都是基於 TCP 的,因爲它是目前業界主流 RPC 框架支持的方式。首先來看看一個 RPC 調用的基本流程,以便大家對它有宏觀的認識,後面再逐一討論其中的細節
調用方(Client)通過本地的 RPC 代理(Proxy)調用相應的接口

本地代理將 RPC 的服務名,方法名和參數等等信息轉換成一個標準的 RPC Request 對象交給 RPC 框架

RPC 框架採用 RPC 協議(RPC Protocol)將 RPC Request 對象序列化成二進制形式,然後通過 TCP 通道傳遞給服務提供方 (Server)

服務端(Server)收到二進制數據後,將它反序列化成 RPC Request 對象

服務端(Server)根據 RPC Request 中的信息找到本地對應的方法,傳入參數執行,得到結果,並將結果封裝成 RPC Response 交給 RPC 框架

RPC 框架通過 RPC 協議(RPC Protocol)將 RPC Response 對象序列化成二進制形式,然後通過 TCP 通道傳遞給服務調用方(Client)

調用方(Client)收到二進制數據後,將它反序列化成 RPC Response 對象,並且將結果通過本地代理(Proxy)返回給業務代碼

在js中,數組Array是引用類型,直接將數組賦值給一個變量名,二者所指向的地址是一樣的。
所以直接複製數組會產生意想不到的結構。


要想解決拷貝一個數組但是對副本的修改不影響原來的數組,有以下方式:
//方法1
var a = [1,2,3];
var b = a.slice();
a.reverse;
console.log(a);//[3,2,1]
console.log(b);//[1,2,3]
//方法2
var c = [4,5,6];
var d = c.concat();
c.reverse();
console.log(c);//[6,5,4]
console.log(d);//[4,5,6]


js拆分數組
<script language="javascript"> 
str="2,2,3,5,6,6"; //這是一字符串 
var strs= new Array(); //定義一數組 
strs=str.split(","); //字符分割 
for (i=0;i<strs.length ;i++ ) 
{ 
document.write(strs[i]+"<br/>"); //分割後的字符輸出 
} 
</script> 


※ 關於js數組的特性
========================================================================================================================================
const my_logger   = require('pinus-logger').getLogger('my-log', __filename);
my_logger.debug(err);



// 保存數據
gredis.setGameBaseInfo(this.opt.roomId, this);


autoSit: true   默認是true 不用填, 默認坐下

readyStart
seatcount   設置人數 人可不發 

※ 關於pinus 服務器的使用
========================================================================================================================================


Ctrl+Alt+T打開終端。
按【CTRL+Alt+enter】鍵就能給ubuntu全屏

connector.connectHandler.login
 


這個路徑下有 node   npm  npx pinus
root@ubuntu:/usr/local/lib/nodejs/node-v10.16.0-linux-x64/bin# 


/root 系統管理員的主目錄

root@ubuntu:/#
root@ubuntu:~#

root@ubuntu:/# 這個是根目錄,對一般用戶只讀,root用戶有所有權限 

root@ubuntu:~# 這個是home目錄,每個非root用戶都會有自己的home目錄 
果你是普通用戶,你的~目錄是/home/your_name/,這是你的地盤,可以爲所欲爲,但出了這個目錄,你只擁有隻讀權限。 
如果你是root用戶,你的~目錄是/root/,權限無限制 


 chown -R lixuekun.users /work
把目錄/work及其下的所有文件和子目錄的屬主改成lixuekun,屬組改成users。

chown -R lixuekun:lixuekun game-server/*            //當時用上條改過,第二天發現沒生效,所以 用此條命令又試了一次

※ 關於Unix系統的使用
========================================================================================================================================
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章