CBrother

CBrother

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為綠色免安裝,只要從官網下載對應系統的壓縮檔即可。
CBrother目錄(windows版本)CBrother目錄(windows版本)
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();    }   }

相關詞條

熱門詞條

聯絡我們