CBrother是一門跨平台的腳本語言,支持真正的多執行緒,它拋棄了傳統腳本語言的GIL全局鎖技術,從而更能發揮多核CPU的強勁性能。
CBrother語法繼承了C類語法體系,有Java,C++,C#,JS,PHP等語言基礎便可以直接上手編寫代碼。
CBrother可以調用C++寫的擴展庫,也可以將CBrother嵌入C++語言裡使用。
基本介紹
- 中文名:CBrother
- 類別:腳本語言
CBrother支持系統,環境安裝,開發環境安裝,語言特點,CBrother擴展模組,CBrother編寫HelloWorld例子,HTTP模組樣例,TCP模組樣例,MySQL模組樣例,Excel模組樣例,
CBrother支持系統
系統 | 32位 | 64位 |
windows | 支持 | 支持 |
macOS | 不支持 | 支持 |
liunx | 支持 | 支持 |
環境安裝
CBrother為綠色免安裝,只要從官網下載對應系統的壓縮檔即可。
ext為c++擴展目錄
include為c++頭檔案,寫擴展或嵌入式調用需要包含
lib為官方提供的一些CBrother工具代碼,使用時需要improt lib/xxx.cb
sample為官方提供的一些例子
開發環境安裝
1.安裝Visual Studio Code
2.在外掛程式欄搜尋CBrother點擊Install安裝
3.點擊左下角的齒輪->Settings->Extendsions->CBrother,配置你的CBrother路徑
4.之後用vscode打開你的CBrother代碼,右鍵選單里點擊Run CBrother,腳本就會自動運行,控制台在編輯器的下方出現。
語言特點
CBrother與c++相似,既支持過程化編程,也支持面向對象編程。
類C語法,更符合大多數程式設計師編程習慣。
變數沒有類型,CBrothe的變數可以保存任何類型的數據。
垃圾回收,程式設計師無需考慮對象的銷毀
好學易用,新手也能快速上手
擴展方便,CBrother可以很方便的用C++進行擴展
可移植性高,一次編碼,可運行在多種系統。
拋棄了GIL技術支持真正的多執行緒
CBrother擴展模組
http模組:CBrother提供了一個Http擴展,它可以作為http服務提供靜態資源下載、動態接口編寫。也可以作為http客戶端請求其他伺服器數據。1.0.7版本後http模組增加了websocket支持。
socket模組:CBrother提供了一個Socket擴展,它可以作為tcp伺服器與客戶端使用,也可以作為udp伺服器與客戶端使用。windows下使用的是IOCP,在liunx下使用的是epoll,在macOS下是poll模型。
mysql模組:CBrother提供了一個MySQL擴展,它可以幫助你操作MySQL資料庫。
OpenSSL模組:CBrother提供了一個OpenSSL擴展,它提供一些常用的加密算法和哈希算法。
excel模組:CBrother提供了一個Excel擴展,可以用來操作xlsx、csv格式的表格。
CBrother編寫HelloWorld例子
function main(parm){ print "Hello World";}
將上面腳本存儲為檔案helloworld.cb,main為入口函式
運行命令: {cbrother路徑}/cbrother -run -rootpath={腳本存放路徑} -code=helloworld.cb
運行結果:
Hello World
HTTP模組樣例
import CBHttp.codeclass HelloAction{ function DoAction(request,respon)//這個函式寫法是固定的,request表示客戶端請求信息,respon是回復給客戶機的信息 { var myTime = new Time(); respon.write("now time is:" + myTime.strftime("%Y/%m/%d %H:%M:%S")); respon.flush(); }}function main(parm){ var httpServer = new HttpServer(); httpServer.addAction("hello.cb",new HelloAction()); //我們註冊接口hello.cb,回響類是HelloAction httpServer.startServer(80);//連線埠和 while(1)//主執行緒不能退出 { Sleep(1000); }}
瀏覽器輸入:{本機IP}/hello.cb,每次訪問返回的都是當前時間。
如果在腳本工作路徑下創建webroot資料夾,裡面放入111.txt
瀏覽器輸入:{本機IP}/111.txt則會下載該檔案
TCP模組樣例
import CBSocket.codeclass TcpAction{ var tcpModule; function OnAccept(sock) { print "accept " + sock; } function OnClose(sock) { print "onclose " + sock; } function OnRecv(sock,byteArray,len) { print "onrecv " + sock + " " + byteArray.readString() + " len:" + len; var byteArray = new ByteArray(); byteArray.writeString("hello tcp client"); tcpModule.sendData(sock,byteArray); } function OnSend(sock,len) { print "onsend " + sock + " " + len; } function OnConnect(sock) { print "onconnect " + sock; var byteArray = new ByteArray(); byteArray.writeString("hellp tcp server!"); tcpModule.sendData(sock,byteArray); }}function main(parm){ var tcpModule = new TcpModule(); var tcpAction = new TcpAction(); tcpAction.tcpModule = tcpModule; tcpModule.setTcpAction(tcpAction); //設定TCP處理類 tcpModule.addListenPort(6060); //監聽6060連線埠 tcpModule.addListenPort(6061,"*"); //監聽6061連線埠,IPV4和IPV6兼容 tcpModule.start(); tcpModule .connect("127.0.0.1",6060); while(1) { Sleep(1000); }}
tcp模組可以是伺服器也可以是客戶端,如上面的例子運行後本機和本機在通訊
MySQL模組樣例
import CBMySQL.codefunction main(parm){ var mysql = new MySQL("127.0.0.1",3306,"root","root","test"); if(!mysql.connect()) { print "mysql connect err!!"; } var res = mysql.upDate("INSERT INTO test (`strv`, `intv`) VALUES ('333', 222)"); if(!res) { print "update err " + mysql.getErr(); } var res = mysql.query("select * from test"); if(!res) { print "query err " + mysql.getErr(); return; } while(mysql.next()) { var strv = mysql.getString(0); var intv = mysql.getInt(1); print "mysql data: " + strv + " " + intv; } mysql.closeConnect();}
Excel模組樣例
import CBExcel.codefunction main(parm){ var excel = new Excel(); var path = GetRoot() + "222.xlsx"; if(!excel.load(path)) { var excelsheet = excel.addWorksheet("222"); var cell = excelsheet.addCell("A10"); cell.set("aaa"); cell = excelsheet.addCell(5,"B"); cell.set(100); cell = excelsheet.addCell(6,7); cell.set(200.0); excel.save(path); excel.save(GetRoot() + "222.csv"); } else { var sheetCnt = excel.getWorksheetCount(); print "sheetCnt:" + sheetCnt; var excelsheet = excel.getWorksheet(0);//or excel.getWorksheet("222"); var totalRows = excelsheet.getTotalRows(); var totalClos = excelsheet.getTotalCols(); print "totalRows:" + totalRows; print "totalClos:" + totalClos; var cell = excelsheet.getCell("A10");//or getCell(9,0); or getCell(9,"A"); print cell.getString(); cell = excelsheet.getCell(5,"b"); print cell.getInt(); print cell.getString(); cell = excelsheet.getCell(6,7); print cell.getDouble(); print cell.getString(); } }