C語言能寫出高性能的web應(yīng)用? 你好Vely

Vely是一個為C語言程序員設(shè)計的框架含滴。它的工作機制是將簡單的語句預編譯到C語言中以提高性能痰哨。
當然胶果,它是免費開源軟件 (Free Open Source Software, 簡稱FOSS)。

Vely的創(chuàng)始人名叫Sergio Mijatovic斤斧,在Oracle核心工程部門工作了10多年早抠,在此之前曾在DARPA工作。
他創(chuàng)建Vely是為了能快速開發(fā)出比用純C語言寫出的更安全的后端應(yīng)用程序撬讽,尤其是 Web應(yīng)用程序蕊连,同時保持C的高性能。

快速上手 這里有個Hello World程序游昼,超級簡單
您將僅在幾分鐘內(nèi)從您自己的 FastCGI(Fast Common Gateway Interface甘苍, 快速通用網(wǎng)關(guān)接口,是一種讓交互程序與Web服務(wù)器通信的協(xié)議) 應(yīng)用程序服務(wù)器獲得一個網(wǎng)頁烘豌!

安裝 Vely

訪問 https://vely.dev/pkg/ 下載并安裝Vely载庭,進入頁面,我們可以看到這個頁面有很多的版本廊佩,基本上都是Linux的囚聚,這里面也有源碼倉庫地址、版本記錄标锄、許可證等信息靡挥。

image.png

然后進入任意一個頁面,它會有一個下載步驟的指導鸯绿,按著步驟走就行了跋破,當然你的服務(wù)器上需要有apt, dnf, zypper or pacman這樣的標準包才能下載,如果沒有執(zhí)行命令時會報錯的瓶蝴,沒有的話就裝一個毒返, 或者可以下載源碼自己編譯,很基礎(chǔ)的舷手,非常簡單拧簸。


image.png

在vim中閃閃發(fā)光

vim編輯器能突出顯示所有內(nèi)容并進行顏色編碼,這點很棒男窟。 那我們接下來就這樣做吧:

vv -m

Hello World

創(chuàng)建代碼所在的目錄:

mkdir hello
cd hello

使用vf命令創(chuàng)建應(yīng)用程序:

sudo vf -i -u $(whoami) helloworld

創(chuàng)建 hello.vely文件:

vi hello.vely

將下面這段代碼粘貼進去:

#include "vely.h"

void hello()
{
    out-header default
    @Hello World!
}

用vv命令編譯應(yīng)用:

vv -q 

大功告成∨璩啵現(xiàn)在,您可以啟動FastCGI應(yīng)用程序服務(wù)器了:

vf helloworld

您可以從Apache歉眷、Nginx或任何其他web服務(wù)器連接到它牺六。在此之前,您可以通過命令行模擬web服務(wù)器發(fā)送反向代理請求來測試你的服務(wù)器

export REQUEST_METHOD=GET
export QUERY_STRING="req=hello"
cgi-fcgi -connect /var/lib/vv/helloworld/sock/sock  /

不出所料汗捡,您將獲得一個響應(yīng):

Content-type: text/html; charset=utf-8
Cache-Control: max-age=0, no-cache 
Pragma: no-cache 
Status: 200 OK

Hello World!

您得到了web客戶端(如瀏覽器)可以解析的響應(yīng)淑际!

從瀏覽器查看

現(xiàn)在,您可以嘗試 Apache 或 Nginx,必須保證其中一種服務(wù)器運行春缕,如果是Nginx盗胀,在Debian系統(tǒng)可以執(zhí)行以下命令

sudo apt install nginx

或者Fedora系統(tǒng):

sudo dnf install nginx

然后需要打開nginx的配置,Ubuntu系統(tǒng)是這樣的:

sudo vi /etc/nginx/sites-enabled/default

RedHat系統(tǒng)是這樣的:

sudo vi /etc/nginx/nginx.conf

Nginx在各種Linux系統(tǒng)上的安裝和配置的方法就不一一列舉了锄贼,網(wǎng)上一搜一大堆票灰,等安裝好后我們來看看該怎么配置。
打開nginx.conf文件后找到server{}代碼塊宅荤,然后在server_name這個屬性后另起一行將下面的代碼直接粘貼進去

location /helloworld { 
    include /etc/nginx/fastcgi_params; 
    fastcgi_pass  unix:///var/lib/vv/helloworld/sock/sock;
}

它會告訴你的Nginx服務(wù)器你的FastCGI應(yīng)用服務(wù)器監(jiān)聽的是哪個端口屑迂,在這個例子里是一個socket文件,當然也能配置成一個TCP端口膘侮,然后需要重啟Nginx服務(wù)器:

sudo systemctl restart nginx

假設(shè)你是在你本地機子上跑的屈糊,打開瀏覽器把下面的url復制粘貼并訪問

http://127.0.0.1/helloworld?req=hello

你會見到Hello World的榛!如果不是本地跑就換成相應(yīng)的IP或主機名琼了,如果沒有瀏覽器,可以使用CURL來測試:

curl -s "http://127.0.0.1/helloworld?req=hello"

定制你的Hello World程序

想稍微修改一下嗎夫晌? 非常簡單雕薪。 在這里,您需要先創(chuàng)建一個有更多字的字符串晓淀,然后將其輸出所袁。 編輯 hello.vely,然后復制以下:

#include "vely.h"

void hello()
{
    out-header default
    num x = 3;
    char *y = "have a nice day";
    write-string define mystr
        @Hello World <<p-num x>> times and <<p-out y>>!
    end-write-string notrim
    p-out mystr
}

再次編譯它:

vv -q 

你的應(yīng)用服務(wù)器會自動重新加載一個新的可執(zhí)行文件凶掰,所以你可以馬上再試一次燥爷,結(jié)果是:

Hello World 3 times and have a nice day!

命令行

作為應(yīng)用程序服務(wù)器運行的代碼同時也支持從命令行運行。 讓我們看看如何從命令行實現(xiàn):

export REQUEST_METHOD=GET
export QUERY_STRING="req=hello"
export VV_SILENT_HEADER=yes
/var/lib/vv/bld/helloworld/helloworld

你會得到相同的輸出懦窘,但沒有標題前翎,如果你跳過設(shè)置 VV_SILENT_HEADER,你也會得到標題畅涂。

還能干啥?

你猜對了港华,除了Hello World你可以用Vely做更多的事情。事實上午衰,還有很多很多立宜。
首先,Vely的所有語句都有自動內(nèi)存分配和垃圾收集器臊岸。這使它更安全橙数,因為它有助于避免內(nèi)存泄漏問題。
您可以輕松訪問MariaDB/mySQL帅戒、PostgreSQL和SQLite數(shù)據(jù)庫商模,創(chuàng)建和訪問包括上傳和下載文件在內(nèi)的web服務(wù),處理GET、POST或cookie等web內(nèi)容施流。您可以安全輕松地編寫復雜字符串响疚。您可以加密、編碼瞪醋、執(zhí)行正則表達式搜索和替換忿晕、使用文件、執(zhí)行程序银受。
試試將Vely用于您能想到的任何后端服務(wù)器應(yīng)用程序或其他程序吧
有很多示例和簡潔的文檔践盼,可以幫助您快速使用Vely。

更多資訊

作者簡介:Vely的創(chuàng)始人名叫Sergio Mijatovic宾巍,在Oracle核心工程部門工作了10多年咕幻,在此之前曾在DARPA工作。
作者動態(tài):https://dev.to/velydev
Vely官網(wǎng):https://vely.dev/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顶霞,一起剝皮案震驚了整個濱河市肄程,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌选浑,老刑警劉巖蓝厌,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異古徒,居然都是意外死亡拓提,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門隧膘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來代态,“玉大人,你說我怎么就攤上這事疹吃”囊桑” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵互墓,是天一觀的道長必尼。 經(jīng)常有香客問我,道長篡撵,這世上最難降的妖魔是什么判莉? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮育谬,結(jié)果婚禮上券盅,老公的妹妹穿的比我還像新娘。我一直安慰自己膛檀,他們只是感情好锰镀,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布娘侍。 她就那樣靜靜地躺著,像睡著了一般泳炉。 火紅的嫁衣襯著肌膚如雪憾筏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天花鹅,我揣著相機與錄音氧腰,去河邊找鬼。 笑死刨肃,一個胖子當著我的面吹牛古拴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播真友,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼黄痪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盔然?” 一聲冷哼從身側(cè)響起桅打,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轻纪,沒想到半個月后油额,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叠纷,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡刻帚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涩嚣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇众。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖航厚,靈堂內(nèi)的尸體忽然破棺而出顷歌,到底是詐尸還是另有隱情,我是刑警寧澤幔睬,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布眯漩,位于F島的核電站,受9級特大地震影響麻顶,放射性物質(zhì)發(fā)生泄漏赦抖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一辅肾、第九天 我趴在偏房一處隱蔽的房頂上張望队萤。 院中可真熱鬧,春花似錦矫钓、人聲如沸要尔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赵辕。三九已至既绩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間还惠,已是汗流浹背熬词。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吸重,地道東北人互拾。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像嚎幸,于是被迫代替她去往敵國和親颜矿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容