真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語(yǔ)言部署上線 部署go語(yǔ)言程序到linux服務(wù)器

Golang項(xiàng)目部署3,容器部署

容器部署即使用 docker 化部署 golang 應(yīng)用程序,這是在云服務(wù)時(shí)代最流行的部署方式,也是最推薦的部署方式。

創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供旌陽(yáng)網(wǎng)站建設(shè)、旌陽(yáng)做網(wǎng)站、旌陽(yáng)網(wǎng)站設(shè)計(jì)、旌陽(yáng)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、旌陽(yáng)企業(yè)網(wǎng)站模板建站服務(wù),10余年旌陽(yáng)做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

跨平臺(tái)交叉編譯是 golang 的特點(diǎn)之一,可以非常方便地編譯出我們需要的目標(biāo)服務(wù)器平臺(tái)的版本,而且是靜態(tài)編譯,非常容易地解決了運(yùn)行依賴問(wèn)題。

使用以下指令可以靜態(tài)編譯 Linux 平臺(tái) amd64 架構(gòu)的可執(zhí)行文件:

生成的 main 便是我們靜態(tài)編譯的,可部署于 Linux amd64 上的可執(zhí)行文件。

我們需要將該可執(zhí)行文件 main 編譯生成 docker 鏡像,以便于分發(fā)及部署。 Golang 的運(yùn)行環(huán)境推薦使用 alpine 基礎(chǔ)系統(tǒng)鏡像,編譯出的容器鏡像約為 20MB 左右。

一個(gè)參考的 Dockerfile 文件如下:

其中,我們的基礎(chǔ)鏡像使用了 loads/alpine:3.8 ,中國(guó)國(guó)內(nèi)的用戶推薦使用該基礎(chǔ)鏡像,基礎(chǔ)鏡像的 Dockerfile 地址: ,倉(cāng)庫(kù)地址:

隨后使用 " docker build -t main . " 指令編譯生成名為 main 的 docker 鏡像。

需要注意的是,在某些項(xiàng)目的架構(gòu)設(shè)計(jì)中, 靜態(tài)文件 和 配置文件 可能不會(huì)隨著鏡像進(jìn)行編譯發(fā)布,而是分開(kāi)進(jìn)行管理和發(fā)布。

例如,使用 MVVM 模式的項(xiàng)目中(例如使用 vue 框架),往往是前后端非常獨(dú)立的,因此在鏡像中往往并不會(huì)包含 public 目錄。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的項(xiàng)目中,也往往并不需要 config 目錄。

因此對(duì)于以上示例的 Dockerfile 的使用,僅作參考,根據(jù)實(shí)際情況請(qǐng)進(jìn)行必要的調(diào)整。

使用以下指令可直接運(yùn)行剛才編譯成的鏡像:

容器的分發(fā)可以使用 docker 官方的平臺(tái): ,國(guó)內(nèi)也可以考慮使用阿里云: 。

在企業(yè)級(jí)生產(chǎn)環(huán)境中, docker 容器往往需要結(jié)合 kubernetes 或者 docker swarm 容器編排工具一起使用。

容器編排涉及到的內(nèi)容比較多,感興趣的同學(xué)可以參考以下資料:

如何將用go語(yǔ)言開(kāi)發(fā)的服務(wù)器程序部署到docker

部署簡(jiǎn)單。Go 編譯生成的是一個(gè)靜態(tài)可執(zhí)行文件,除了 glibc 外沒(méi)有其他外部依賴。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個(gè)基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫(kù)的依賴關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。這和 Python 有著巨大的區(qū)別。由于歷史的原因,Python 的部署工具生態(tài)相當(dāng)混亂【比如 setuptools, distutils, pip, buildout 的不同適用場(chǎng)合以及兼容性問(wèn)題】。官方 PyPI 源又經(jīng)常出問(wèn)題,需要搭建私有鏡像,而維護(hù)這個(gè)鏡像又要花費(fèi)不少時(shí)間和精力。

并發(fā)性好。Goroutine 和 channel 使得編寫(xiě)高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來(lái)的各種問(wèn)題。單個(gè) Go 應(yīng)用也能有效的利用多個(gè) CPU 核,并行執(zhí)行的性能好。這和 Python 也是天壤之比。多線程和多進(jìn)程的服務(wù)端程序編寫(xiě)起來(lái)并不簡(jiǎn)單,而且由于全局鎖 GIL 的原因,多線程的 Python 程序并不能有效利用多核,只能用多進(jìn)程的方式部署;如果用標(biāo)準(zhǔn)庫(kù)里的 multiprocessing 包又會(huì)對(duì)監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的 supervisor 管理進(jìn)程,對(duì) fork 支持不好】。部署 Python 應(yīng)用的時(shí)候通常是每個(gè) CPU 核部署一個(gè)應(yīng)用,這會(huì)造成不少資源的浪費(fèi),比如假設(shè)某個(gè) Python 應(yīng)用啟動(dòng)后需要占用 100MB 內(nèi)存,而服務(wù)器有 32 個(gè) CPU 核,那么留一個(gè)核給系統(tǒng)、運(yùn)行 31 個(gè)應(yīng)用副本就要浪費(fèi) 3GB 的內(nèi)存資源。

良好的語(yǔ)言設(shè)計(jì)。從學(xué)術(shù)的角度講 Go 語(yǔ)言其實(shí)非常平庸,不支持許多高級(jí)的語(yǔ)言特性;但從工程的角度講,Go 的設(shè)計(jì)是非常優(yōu)秀的:規(guī)范足夠簡(jiǎn)單靈活,有其他語(yǔ)言基礎(chǔ)的程序員都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提高了團(tuán)隊(duì)協(xié)作的一致性。比如 gofmt 自動(dòng)排版 Go 代碼,很大程度上杜絕了不同人寫(xiě)的代碼排版風(fēng)格不一致的問(wèn)題。把編輯器配置成在編輯存檔的時(shí)候自動(dòng)運(yùn)行 gofmt,這樣在編寫(xiě)代碼的時(shí)候可以隨意擺放位置,存檔的時(shí)候自動(dòng)變成正確排版的代碼。此外還有 gofix, govet 等非常有用的工具。

執(zhí)行性能好。雖然不如 C 和 Java,但通常比原生 Python 應(yīng)用還是高一個(gè)數(shù)量級(jí)的,適合編寫(xiě)一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。

如何部署Golang應(yīng)用

如何部署Golang應(yīng)用

安裝supervisord

# 通過(guò)載入程式 ez_setup.py 來(lái)安裝。這個(gè)載入程式會(huì)聯(lián)網(wǎng)下載最新版本setuptools來(lái)安裝,同時(shí)也可以更新本地的setuptools。

wget :peak.telemunity./dist/ez_setup.py

sudo python ez_setup.py

# 更新setuptools:

sudo python ez_setup.py -U setuptools

# 安裝supervisor

easy_install supervisor

# 生成配置檔案

echo_supervisord_conf /etc/supervisord.conf

# 編輯配置檔案

vim /etc/supervisord.conf

# 進(jìn)入vim后找到最后兩行,開(kāi)啟注釋?zhuān)ㄈ∠懊娴姆痔?hào)),

# [include]

# files = supervisor.d/*.ini

# 將所有的supervisor配置都放到 /etc/supervisor.d目錄

mkdir /etc/supervisor.d

建立 supervisor 對(duì)應(yīng)程式的配置檔案

其中的一些路徑需要換成自己對(duì)應(yīng)的,這里將 zankbo 這個(gè)web 應(yīng)用放在了對(duì)應(yīng)的使用者目錄下

通過(guò)在生產(chǎn)伺服器上設(shè)定environment可以在程式里判斷是線上還是開(kāi)發(fā)模式,如 zankbo 的 debug判斷

當(dāng)然也可已在啟動(dòng)命令處加入引數(shù),如 mand = /home/zankbo/gopath/src/zankbo/zankbo -d 來(lái)關(guān)閉Debug模式。

if os.Getenv("APP_NAME") == "ZANKBO_PRODUCT" {

beego.RunMode = "prod"

}

vim /etc/supervisor.d/zankbo.ini

# 寫(xiě)入

[program:zankbo]

directory = /home/zankbo/gopath/src/zankbo

environment=APP_NAME="ZANKBO_PRODUCT"

mand = /home/zankbo/gopath/src/zankbo/zankbo

autostart = true

startsecs = 5

user = zankbo

redirect_stderr = true

stdout_logfile = /home/zankbo/log/zankbo.log

建立對(duì)應(yīng)的使用者

useradd zankbo

# 將使用者加入到zankbo使用者組,Nginx以使用者執(zhí)行

usermod -a -G zankbo

# 更改使用者家目錄使用者組的許可權(quán),使Nginx可以訪問(wèn)

chmod g+rx /home/zankbo

部署Go環(huán)境

其中的目錄為,go:Go安裝目錄 gopath:Go工作目錄,下面有src、pkg、bin三個(gè)目錄 log:日志資料夾

[zankbo@MyCloudServer ~]$ pwd

/home/zankbo

[zankbo@MyCloudServer ~]$ vim .bashrc

# 設(shè)定Go環(huán)境變數(shù),在.bashrc檔案末尾寫(xiě)下如下內(nèi)容

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bi

# 切換到使用者家目錄

[root@MyCloudServer ~]# su - zankbo

[zankbo@MyCloudServer ~]$ ls

go gopath log

將專(zhuān)案程式碼放到gopath/src下面,如我的播客專(zhuān)案:

[zankbo@MyCloudServer ~]$ tree -L 2 gopath/src/

gopath/src/

├── github.

│ ├── astaxie

│ ├── beego

│ ├── go-sql-driver

│ ├── howeyc

│ ├── jacobsa

│ ├── *** artystreets

│ └── wendal

└── zankbo

├── admin

├── blog

├── build_pkg.sh

├── mon

├── conf

├── controllers

├── dbstruct.mwb

├── main.go

├── models

├── static

├── views

└── zankbo

匯入專(zhuān)案sql檔案到資料庫(kù)

在專(zhuān)案資料夾執(zhí)行build

[zankbo@MyCloudServer zankbo]$ pwd

/home/zankbo/gopath/src/zankbo

[zankbo@MyCloudServer zankbo]$ go build

會(huì)在專(zhuān)案下生成與包名對(duì)應(yīng)的可執(zhí)行檔案,這里為:zankbo,build的時(shí)候可能會(huì)遇到錯(cuò)誤,比如mysql的密碼之類(lèi)的,可根據(jù)提示排錯(cuò)。

通過(guò)supervisor 來(lái)啟動(dòng)服務(wù)

# supervisorctl start zankbo

配置Nginx

server {

listen 80;

server_name zankbo. zankbo.;

root /home/zankbo/gopath/src/zankbo;

error_log logs/zankbo..error.log warn ;

location /static/ {

root /home/zankbo/gopath/src/zankbo;

location ~ .*\.(js|css)$ {

aess_log off;

expires 1d;

}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

gzip off;

aess_log off;

expires 3d;

}

}

location / {

proxy_pass :127.0.0.1:8080;

}

}

如何部署thinkphp 應(yīng)用

1、首先在官方網(wǎng)站下載ThinkPHP最新版本。

2、下載后的壓縮檔案解壓到WEB目錄(或者任何目錄都可以),框架的目錄結(jié)構(gòu)為:

├─ThinkPHP.php 框架入口檔案

├─Common 框架公共檔案

├─Conf 框架配置檔案

├─Extend 框架擴(kuò)充套件目錄

├─Lang 核心語(yǔ)言包目錄

├─Lib 核心類(lèi)庫(kù)目錄

│ ├─Behavior 核心行為類(lèi)庫(kù)

│ ├─Core 核心基類(lèi)庫(kù)

│ ├─Driver 內(nèi)建驅(qū)動(dòng)

│ │ ├─Cache 內(nèi)建快取驅(qū)動(dòng)

│ │ ├─Db 內(nèi)建資料庫(kù)驅(qū)動(dòng)

│ │ ├─TagLib 內(nèi)建標(biāo)簽驅(qū)動(dòng)

│ │ └─Template 內(nèi)建模板引擎驅(qū)動(dòng)

│ └─Template 內(nèi)建模板引擎

└─Tpl 系統(tǒng)模板目錄

注意,框架的公共入口檔案ThinkPHP.php是不能直接執(zhí)行的,該檔案只能在專(zhuān)案入口檔案中呼叫才能正常執(zhí)行,這是很多新手很容易犯的一個(gè)錯(cuò)誤。

3、接下來(lái)先在WEB根目錄下面建立一個(gè)app子目錄(這個(gè)就是app就是專(zhuān)案名),然后在該目錄下面建立一個(gè)index.php檔案,新增一行簡(jiǎn)單的程式碼:

require '/ThinkPHP框架所在目錄/ThinkPHP.php';

這行程式碼的作用就是載入ThinkPHP框架的入口檔案ThinkPHP.php,這是所有基于ThinkPHP開(kāi)發(fā)應(yīng)用的第一步。然后,在瀏覽器中訪問(wèn)這個(gè)入口檔案。

如何部署應(yīng)用到was上

websphere的預(yù)設(shè)使用記憶體應(yīng)該是256的 你的38的war包部署 不應(yīng)該出現(xiàn)記憶體崩掉的問(wèn)題呀。

部署系統(tǒng)也很簡(jiǎn)單么,就是打成war包,記得打war包得時(shí)候要檢查web.xml的格式 websphere很在意這個(gè)東東的。

然后一步一步的部署就可以了。was慢 但是不會(huì)你那么慢得??梢再Nerror出來(lái)看看

如何部署python3 的應(yīng)用

mod_python,這是apache內(nèi)建的模組,很?chē)?yán)重的依賴于mod_python編譯使用的python版本,和apache配套使用,不推薦

cgi,這個(gè)太old,不推薦,而且nginx不支援cgi方式,只能用ligd或者apache

fastcgi ,這個(gè)是目前流行最廣的做法,通過(guò)flup模組來(lái)支援的,在nginx里對(duì)應(yīng)的配置指令是 fastcgi_pass

spawn-fcgi,這個(gè)是fastcgi多程序管理程式,ligd安裝包附帶的,和

flup效果一樣,區(qū)別是flup是

python程式碼級(jí)引入,spawn-fcgi是外部程式。spawn-fcgi用途很廣,可以支援任意語(yǔ)言開(kāi)發(fā)的代

碼,php,python,perl,只要你程式碼實(shí)現(xiàn)了fastcgi介面,它都可以幫你管理你的程序

scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi協(xié)議很簡(jiǎn)單,我覺(jué)得和fastcgi差不多,只是沒(méi)有怎么推廣開(kāi)來(lái),nginx對(duì)應(yīng)的配置指令是scgi_pass,你想用就用,flup也支援。

,nginx使用proxy_pass轉(zhuǎn)發(fā),這個(gè)要求后端appplication必須內(nèi)建一個(gè)能處理高并發(fā)的 server,在python的web框架當(dāng)中,只能選擇tornado.

python程式設(shè)計(jì)師喜歡發(fā)明輪子,tornado除了是一個(gè)web framework之外,它還可以單獨(dú)提供高效能

server,所以,如果你采用其他python框架寫(xiě)程式碼,比如說(shuō)bottle,也一樣可以通過(guò)import

tornado 來(lái)啟動(dòng)一個(gè)高效能的

server,同樣的可以采用協(xié)議和nginx一起來(lái)部署。擴(kuò)充套件開(kāi)來(lái),python包里面能處理高并發(fā)的

server還有很多,比如說(shuō)gevent,也可以被其他框架引用來(lái)支援方式部署。

現(xiàn)實(shí)當(dāng)中,用java來(lái)做web程式,通常就用和nginx配合,應(yīng)用伺服器選擇tomcat或者jetty

uwsgi,包括4部分組成,

nginx從0.8.4開(kāi)始內(nèi)建支援uwsgi協(xié)議,uwsgi協(xié)議非常簡(jiǎn)單,一個(gè)4個(gè)位元組header+一個(gè)body,body可以是很多協(xié)議的

包,比如說(shuō),cgi等(通過(guò)header里面欄位標(biāo)示),我曾經(jīng)做個(gè)一個(gè)小規(guī)模的效能對(duì)比測(cè)試,結(jié)果表明,uwsgi和fastcgi相比,效能

沒(méi)有太明顯的優(yōu)勢(shì),也可能是資料集較小的原因

uwsgi的特點(diǎn)在于自帶的程序控制程式.它是用c語(yǔ)言編寫(xiě),使用natvie函式,其實(shí)和spawn-fcgi/php-fpm類(lèi)似。所以u(píng)wsgi可以支援多種應(yīng)用框架,包括(python,lua,ruby,erlang,go)等等

uwsgi協(xié)議

web server內(nèi)建支援協(xié)議模組

application伺服器協(xié)議支援模組

程序控制程式

Gunicorn,和uwsgi類(lèi)似的工具,從rails的部署工具(Unicorn)移植過(guò)來(lái)的。但是它使用的協(xié)議是 WSGI,全稱(chēng)是Python Web Server Gateway Interface ,這是python2.5時(shí)定義的官方標(biāo)準(zhǔn)(PEP 333 ),根紅苗正,而且部署比較簡(jiǎn)單,:gunicorn./ 上有詳細(xì)教程

mod_wsgi,apache的一個(gè)module,也是支援WSGI協(xié)議,:code.google./p/modwsgi/

如何部署簡(jiǎn)單python + flask應(yīng)用

python是一款應(yīng)用非常廣泛的指令碼程式語(yǔ)言,谷歌公司的網(wǎng)頁(yè)就是用python編寫(xiě)。python在生物資訊、統(tǒng)計(jì)、網(wǎng)頁(yè)制作、計(jì)算等多個(gè)領(lǐng)域都體現(xiàn)出了強(qiáng)大的功能。python和其他指令碼語(yǔ)言如java、R、Perl 一樣,都可以直接在命令列里執(zhí)行指令碼程式。

所需工具:

python3.4

flask

nginx

gunicorn

supervisor

系統(tǒng)環(huán)境:

Ubuntu 14.04LTS

我們先寫(xiě)一個(gè)最基本的flask應(yīng)用:

demo.py

from flask import Flask

app = Flask(**name**)

@app.route('\')

def index():

return 'Hello World.'

if __name__ == __main__:

app.run()

執(zhí)行這個(gè)py檔案,開(kāi)啟瀏覽器訪問(wèn)127.0.0.1:5000就能看到顯示Hello World的頁(yè)面 .

如果讓這個(gè)flask引用監(jiān)聽(tīng)來(lái)自公網(wǎng)ip的請(qǐng)求,理論上你跑此程式的機(jī)器就相當(dāng)于一個(gè)伺服器了,然而這個(gè)伺服器并不完美,所以我們需要nginx和gunicorn來(lái)增加它的功能,讓它真刀真槍上生產(chǎn)環(huán)境的時(shí)候能按要求執(zhí)行。

flask自帶的WSGI框架效能很差勁,只能適用于開(kāi)發(fā)環(huán)境除錯(cuò)使用。我們用專(zhuān)業(yè)一點(diǎn)的gunicorn(還有很多其他優(yōu)秀的框架)替代flask自帶的WSGI框架。

配置完后,通過(guò)命令’/usr/local/bin/gunicorn -b127.0.0.1:5000‘啟動(dòng)應(yīng)用。開(kāi)啟瀏覽器訪問(wèn)127.0.0.1:5000,同樣能夠得到返回頁(yè)面

然而gunicorn也僅僅是一個(gè)python的WSGI框架而已,要讓它真正處理來(lái)自網(wǎng)際網(wǎng)路的各類(lèi)訪問(wèn)功能還是有點(diǎn)欠缺,這時(shí)候就需要用到大名鼎鼎的nginx 伺服器來(lái)替gunicorn遮風(fēng)擋雨了。

Ubuntu下安裝nginx可以用命令

sudo apt-get install nginx

安裝后需要進(jìn)行下配置:

cd /etc/nginx/sites-available

sudo vi test (test為配置名稱(chēng),可以根據(jù)自己專(zhuān)案進(jìn)行命名)

test檔案的配置為:

server {

listen 80; # 監(jiān)聽(tīng)80埠

location / {

proxy_pass :127.0.0.1:5000; # 代理本機(jī)127.0.0.1:5000的服務(wù)

}

location /static {

alias /home/ubuntu/myproject/myblog/app/static; # 負(fù)載均衡

}

}

cd ..

cd sites-enable

sudo ln -s ../sites-available/lwhile . (建立軟連結(jié),別漏掉最后的.)

sudo service nginx reload

sudo service nginx restart

這樣nginx的基本配置檔案就寫(xiě)好了 接下來(lái)我們配置程序管理工具supervisor supervisor可以在后面啟動(dòng)你的python程序,這樣很方便

1.cd /etc/supervisor/conf.d

2.sudo vi test.conf (test為檔名)

[program:test]

mand = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py

3.sudo supervisorctl

4.reload

5.start test

如果一切正常,做完這所有步驟之后,現(xiàn)在公網(wǎng)的ip訪問(wèn)你的主機(jī),就可以開(kāi)啟你的flask應(yīng)用了

python是一款應(yīng)用非常廣泛的指令碼程式語(yǔ)言,谷歌公司的網(wǎng)頁(yè)就是用python編寫(xiě)。python在生物資訊、統(tǒng)計(jì)、網(wǎng)頁(yè)制作、計(jì)算等多個(gè)領(lǐng)域都體現(xiàn)出了強(qiáng)大的功能。python和其他指令碼語(yǔ)言如java、R、Perl 一樣,都可以直接在命令列里執(zhí)行指令碼程式。工具/原料

python;CMD命令列;windows作業(yè)系統(tǒng)

方法/步驟

1、首先下載安裝python,建議安裝2.7版本以上,3.0版本以下,由于3.0版本以上不向下相容,體驗(yàn)較差。

2、開(kāi)啟文字編輯器,推薦editplus,notepad等,將檔案儲(chǔ)存成 .py格式,editplus和notepad支援識(shí)別python語(yǔ)法。

指令碼第一行一定要寫(xiě)上 #!usr/bin/python

表示該指令碼檔案是可執(zhí)行python指令碼

如果python目錄不在usr/bin目錄下,則替換成當(dāng)前python執(zhí)行程式的目錄。

3、編寫(xiě)完指令碼之后注意除錯(cuò)、可以直接用editplus除錯(cuò)。除錯(cuò)方法可自行百度。指令碼寫(xiě)完之后,開(kāi)啟CMD命令列,前提是python 已經(jīng)被加入到環(huán)境變數(shù)中,如果沒(méi)有加入到環(huán)境變數(shù),請(qǐng)百度

4、在CMD命令列中,輸入 “python” + “空格”,即 ”python “;將已經(jīng)寫(xiě)好的指令碼檔案拖拽到當(dāng)前游標(biāo)位置,然后敲回車(chē)執(zhí)行即可。

光子網(wǎng)絡(luò)(photon network)主網(wǎng)部署上線

光子網(wǎng)絡(luò)是一種適用于以太坊和光譜區(qū)塊鏈上ERC20 token和ERC223 token的鏈下支付網(wǎng)絡(luò),具有快速、可擴(kuò)展和低成本的特點(diǎn),并提供了與區(qū)塊鏈類(lèi)似的安全性和去中心化保證。在兼容性方面,光子網(wǎng)絡(luò)不僅可以在windows、Linux、macOS等平臺(tái)上運(yùn)行,而且支持Android、iOS等移動(dòng)平臺(tái);為適配移動(dòng)平臺(tái)安全性和穩(wěn)定性需求,光子網(wǎng)絡(luò)采用精簡(jiǎn)狀態(tài)恢復(fù)、異步響應(yīng)及Matrix集群通信機(jī)制,提升了移動(dòng)微支付的用戶體驗(yàn)。更進(jìn)一步,在光譜生態(tài)meshbox的支持下,光子網(wǎng)絡(luò)還可以進(jìn)行更有效的鏈接支付以及直接通道無(wú)網(wǎng)支付,解決網(wǎng)絡(luò)信號(hào)不佳及網(wǎng)絡(luò)擁堵等場(chǎng)景下的支付需求。最后,光子網(wǎng)絡(luò)還提供了跨鏈token 原子互換以及較完善的第三方服務(wù)支持,包括:與比特幣、萊特幣、以太坊、SMT的兩兩跨鏈互換,第三方代理服務(wù)幫助離線節(jié)點(diǎn)監(jiān)控通道資金安全,第三方路由查找服務(wù)提供路由查詢及通道收費(fèi)等,光子網(wǎng)絡(luò)將與光譜生態(tài)一起構(gòu)建價(jià)值傳輸?shù)臉蛄?,為真正萬(wàn)物互聯(lián)奠定堅(jiān)實(shí)的基礎(chǔ)。

2.1 基礎(chǔ)功能

光子網(wǎng)絡(luò)的基礎(chǔ)功能包括:通道打開(kāi)、通道存款、鏈下直接通道轉(zhuǎn)賬、鏈下間接通道轉(zhuǎn)賬、通道關(guān)閉、通道更新、通道結(jié)算。簡(jiǎn)要描述基礎(chǔ)功能使用場(chǎng)景如下:假設(shè)有三個(gè)用戶Alice、 Bob和Charlie想使用光子網(wǎng)絡(luò)進(jìn)行鏈下轉(zhuǎn)賬交易。以Alice發(fā)給Bob、Alice發(fā)送給Chalie為例:Alice打算轉(zhuǎn)賬30個(gè)token給Bob,轉(zhuǎn)賬20token給Charlie。簡(jiǎn)單支付過(guò)程會(huì)是什么樣呢?

第一步,打開(kāi)通道。如果Alice和Bob是第一次使用photon network進(jìn)行轉(zhuǎn)賬交易,他們之前沒(méi)有直接通道相連。那么對(duì)于交易發(fā)起者Alice來(lái)說(shuō), 她需要先使用打開(kāi)通道功能,在Alice和Bob之間建立一條通道。此時(shí),雙方建立的通道內(nèi)沒(méi)有token,Alice和Bob可以在通道建立后,單獨(dú)進(jìn)行存款操作,也可以在建立通道的同時(shí),存一部分token進(jìn)通道內(nèi)。完成了打開(kāi)通道,就可以使用新建的通道。同理,Alice也可以與Charlie打開(kāi)通道,Bob也可以與Charlie打開(kāi)通道,我們假設(shè)是Bob與Charlie打開(kāi)了通道。

第二步,存款進(jìn)通道。如果Alice在第一步通道創(chuàng)建時(shí)沒(méi)有進(jìn)行存款,為了能夠給Bob進(jìn)行轉(zhuǎn)賬,則Alice需要使用通道存款功能,向新創(chuàng)建的通道存入一定數(shù)量的token,存款操作可以重復(fù)進(jìn)行多次,Alice和Bob都可以向通道內(nèi)存款。假定現(xiàn)在Alice向Alice—— Bob通道存了100 token進(jìn)通道,則目前Alice—— Bob通道總?cè)萘繛?00 token,其中Alice為100 token,Bob為0 token。此外,Bob在Bob—— Charlie通道內(nèi)也存入80 token。

第三步,鏈下轉(zhuǎn)賬。在光子網(wǎng)絡(luò)的支持下,Alice可以向Bob發(fā)送30token的轉(zhuǎn)賬,因?yàn)槟壳癆lice和Bob之間存在直接通道,并且在通道內(nèi)Alice有100 token的余額,因此,直接通道轉(zhuǎn)賬成功。轉(zhuǎn)賬完成后,Alice的存款為70token,Bob的存款為30token,此時(shí),因?yàn)榻灰壮晒Πl(fā)送,沒(méi)有鎖定token。Alice向Charlie發(fā)送20token的轉(zhuǎn)賬,因?yàn)锳lice和Charlie之間沒(méi)有直接通道,所以不能進(jìn)行直接通道鏈下轉(zhuǎn)賬;但是,Alice和Bob,Bob和Charlie之間有直接通道,Alice可以通過(guò)Bob向Charlie進(jìn)行間接通道轉(zhuǎn)賬。轉(zhuǎn)賬完成后,Alice—— Bob通道內(nèi)余額為Alice 50token,Bob 50token; Bob—— Charlie通道內(nèi)余額為Bob 60token,Charlie 20token。

第四步:關(guān)閉通道。Alice在與Bob交易完成后,不想再繼續(xù)使用她們之間的這條通道,想取回通道內(nèi)的資金,此時(shí)Alice可以使用關(guān)閉通道功能單方面關(guān)閉這條通道,并等待通道更新后進(jìn)行結(jié)算。

第五步:更新通道。Alice為了不損失錢(qián),在通道關(guān)閉的同時(shí)需要提交最新的余額證明,更新對(duì)方給自己的轉(zhuǎn)賬金額;同樣,Bob得知Alice打算關(guān)閉他們之間的通道,為了防止自己受損失,Bob也需要使用更新通道功能,提交Alice轉(zhuǎn)賬給自己的證明,雙方更新通道余額(并解鎖已注冊(cè)鎖的交易)后,可以進(jìn)行通道結(jié)算。

第六步:結(jié)算通道。雙方在結(jié)算窗口期后,任意一方可以使用通道結(jié)算功能將通道內(nèi)的資金返還回雙方各自的鏈上帳戶中。如Alice 50token ,Bob 50token。結(jié)算完成后,Alice—— Bob這條通道將被銷(xiāo)毀。

2.2 特色功能

在基礎(chǔ)功能之外,光子網(wǎng)絡(luò)還有以下一些特色功能。

(1)合作關(guān)閉通道

在大部分的情況下,通道的雙方是合作的。因此,單方關(guān)閉通道等待超時(shí)增加了復(fù)雜度和花費(fèi)。為了提高效率,光子網(wǎng)絡(luò)增加了合作關(guān)閉通道功能,通道雙方只需要簽名表示同意最終狀態(tài)。雙方合作關(guān)閉通道,可以立即進(jìn)行結(jié)算,順利情況下可以在20秒內(nèi),將 token 返回到各自賬戶上。

(2)不關(guān)閉通道取現(xiàn)

通道參與雙方通過(guò)協(xié)商一致,在不關(guān)閉通道的情況下,可以從通道中提取一部分資金到自己的鏈上賬戶。光子網(wǎng)絡(luò)為了防止重放攻擊,在取錢(qián)后重新設(shè)置通道打開(kāi)的區(qū)塊數(shù),防止取錢(qián)后一方使用舊的余額證明關(guān)閉通道獲取額外利益。

(3)更完善的第三方支持

光子網(wǎng)絡(luò)提供第三方代理服務(wù),支持代理提交余額證明,代理解鎖等功能,并可延伸支持代理創(chuàng)建通道、代理存款等功能,通道參與雙方可以在沒(méi)有光譜(以太坊)的情況下(離線)進(jìn)行創(chuàng)建通道等操作,并且保證自身利益的安全;光子網(wǎng)絡(luò)提供第三方路由查找服務(wù),優(yōu)化路由計(jì)算效率和準(zhǔn)確率以提高轉(zhuǎn)賬成功率,同時(shí)實(shí)現(xiàn)通道收費(fèi)功能,激勵(lì)中間節(jié)點(diǎn)以提升光子網(wǎng)絡(luò)整體使用效能。

(4)引入懲罰機(jī)制

為了提高路由效率及資金的利用率,光子網(wǎng)絡(luò)設(shè)計(jì)了交易聲明放棄方式取代交易雙方互鎖方式,中轉(zhuǎn)節(jié)點(diǎn)聲明放棄余額不足的轉(zhuǎn)賬,從通道雙方的鎖集合中移除這個(gè)轉(zhuǎn)賬,由前向節(jié)點(diǎn)重選路由轉(zhuǎn)發(fā)。如果放棄鎖的節(jié)點(diǎn)在結(jié)算前對(duì)已放棄的鎖重新解鎖,光子網(wǎng)絡(luò)將對(duì)不誠(chéng)實(shí)的路由中間節(jié)點(diǎn)進(jìn)行懲罰。

(5)密碼注冊(cè)

光子網(wǎng)絡(luò)新增密碼鏈上注冊(cè)功能,通過(guò)鏈上密碼注冊(cè)時(shí)間判斷交易是否過(guò)期,未完成的短期交易(鎖超時(shí))只要有密碼(secret)已經(jīng)注冊(cè)即可認(rèn)為安全,資金通道利用率更高,不會(huì)因?yàn)槟硞€(gè)交易失敗,而造成通道關(guān)閉。

(6)支持 ERC223 token

ERC223 token標(biāo)準(zhǔn)在現(xiàn)有的ERC20標(biāo)準(zhǔn)基礎(chǔ)引入了一些新功能,如防止意外轉(zhuǎn)賬的發(fā)生等。目前已有部分token支持ERC223標(biāo)準(zhǔn),為了使光子網(wǎng)絡(luò)更具普遍應(yīng)用價(jià)值,相應(yīng)增加了對(duì)ERC223 token的支持。

(7)支持 ERC20 擴(kuò)展 ApproveAndCall

增加ApproveAndCall 接口可以對(duì)token邏輯和業(yè)務(wù)邏輯操作進(jìn)行簡(jiǎn)化,光子網(wǎng)絡(luò)為適應(yīng)更多token的調(diào)用需要,已增加ApproveAndCall擴(kuò)展,支持多種模式的調(diào)用。

三、 光子網(wǎng)絡(luò)(photon network)優(yōu)點(diǎn)

光子網(wǎng)絡(luò)最主要的功能是進(jìn)行鏈下微支付,具有安全、快速、可擴(kuò)展和低費(fèi)用的優(yōu)點(diǎn)。此外,光子網(wǎng)絡(luò)與其他的狀態(tài)通道相比,還具有以下一些優(yōu)點(diǎn):

(1)廣泛的跨平臺(tái)和移動(dòng)適配應(yīng)用

現(xiàn)有的一些狀態(tài)通道技術(shù)實(shí)現(xiàn)多基于特定的平臺(tái),目前能夠?qū)崿F(xiàn)跨平臺(tái)功能應(yīng)用的相對(duì)較少,光子網(wǎng)絡(luò)采用go語(yǔ)言開(kāi)發(fā),可以在windows、Linux、macOS等平臺(tái)上運(yùn)行。另外,光子網(wǎng)絡(luò)設(shè)計(jì)的應(yīng)用場(chǎng)景之一是目前應(yīng)用廣泛的移動(dòng)端和智能設(shè)備,因此可以完全適配Android和iOS等移動(dòng)端系統(tǒng)。光子網(wǎng)絡(luò)為了提高移動(dòng)設(shè)備的通信穩(wěn)定性和更好的用戶體驗(yàn),使用Matrix消息框架進(jìn)行底層通信,此集群管理方案在普通的硬件支持下可達(dá)每秒百萬(wàn)級(jí)別的吞吐量,其點(diǎn)對(duì)點(diǎn)通信在穩(wěn)定可靠(均需簽名和加密)的room內(nèi)進(jìn)行,可實(shí)時(shí)監(jiān)控節(jié)點(diǎn)的狀態(tài)并提供高效的通信效能。

(2)精簡(jiǎn)的安全保護(hù)(狀態(tài)恢復(fù))機(jī)制

為了保證交易過(guò)程的正常進(jìn)行,以及更好的適配移動(dòng)設(shè)備,光子網(wǎng)絡(luò)對(duì)交易中可能出現(xiàn)的意外場(chǎng)景進(jìn)行了分析并針對(duì)性的設(shè)計(jì)了解決方案,實(shí)現(xiàn)交易節(jié)點(diǎn)狀態(tài)數(shù)據(jù)的同步以保護(hù)交易安全。為了避免交易過(guò)程中出現(xiàn)意外造成移動(dòng)設(shè)備存儲(chǔ)過(guò)多信息,光子網(wǎng)絡(luò)沒(méi)有采取所有情況都可以繼續(xù)交易的機(jī)制(這樣會(huì)存儲(chǔ)大量數(shù)據(jù),對(duì)移動(dòng)設(shè)備的使用效率會(huì)有較大影響),在確保意外節(jié)點(diǎn)重啟后不會(huì)丟失token,通道仍可以繼續(xù)使用的原則上設(shè)計(jì)了精簡(jiǎn)狀態(tài)恢復(fù)機(jī)制,整體上保護(hù)了交易的安全。

(3)日趨完善的第三方支持

光子網(wǎng)絡(luò)從安全和效率的角度提供了多個(gè)第三方支持,當(dāng)前的第三方支持包括第三方代理和第三方路由服務(wù),第三方代理可以幫助委托方監(jiān)控通道狀態(tài),并在通道另一方關(guān)閉通道結(jié)算時(shí)更新通道狀態(tài),對(duì)移動(dòng)節(jié)點(diǎn)離線后資金的安全有良好的保證;第三方路由服務(wù)接收當(dāng)前所有節(jié)點(diǎn)的通道狀態(tài)和收費(fèi)信息,可實(shí)時(shí)監(jiān)控節(jié)點(diǎn)的狀態(tài)并提供當(dāng)前最優(yōu)的路由及收費(fèi)方案來(lái)提高轉(zhuǎn)賬成功率。目前,第三方服務(wù)正進(jìn)一步完善性能并集成進(jìn)光子網(wǎng)絡(luò),方便用戶對(duì)光子網(wǎng)絡(luò)的使用。

(4)特殊應(yīng)用場(chǎng)景支持

無(wú)網(wǎng)和跨鏈?zhǔn)枪庾泳W(wǎng)絡(luò)的亮點(diǎn)。在meshbox的支持下,光子網(wǎng)絡(luò)可以在不依賴互聯(lián)網(wǎng)(公鏈)的情況下進(jìn)行直接通道無(wú)網(wǎng)安全支付,在網(wǎng)絡(luò)信號(hào)不佳和網(wǎng)絡(luò)擁堵的場(chǎng)景下有現(xiàn)實(shí)的應(yīng)用需求;此外,光子網(wǎng)絡(luò)可以在不借助第三方的情況下實(shí)現(xiàn)鏈下原子資產(chǎn)轉(zhuǎn)換,對(duì)應(yīng)應(yīng)用廣泛的跨鏈?zhǔn)袌?chǎng)需求。光子網(wǎng)絡(luò)針對(duì)無(wú)網(wǎng)和跨鏈設(shè)計(jì)了相應(yīng)的接口和使用流程,初步解決了用戶在特殊場(chǎng)景下支付和交換難題。

源碼地址:

開(kāi)發(fā)文檔:


分享題目:go語(yǔ)言部署上線 部署go語(yǔ)言程序到linux服務(wù)器
網(wǎng)站地址:http://weahome.cn/article/doseeid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部