1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Weixin4c微信公眾號框架引擎

        聯(lián)合創(chuàng)作 · 2023-09-24 15:31

        Weixin4c 是基于C技術(shù)環(huán)境的微信公眾號框架引擎(weixin4c)

        1    背景

        weixin4c是一個基于C技術(shù)環(huán)境的建立在FastCGI高性能Web應(yīng)用服務(wù)器架構(gòu)上的微信公眾號框架引擎,它封裝了公眾號應(yīng)用服務(wù)器底層框架,你只需要編寫業(yè)務(wù)邏輯代碼,以回調(diào)函數(shù)機制接入框架,就能快速構(gòu)造出微信公眾號服務(wù)。

        用C技術(shù)環(huán)境開發(fā)微信公眾號應(yīng)用的確有些奇怪,但是我沒有互聯(lián)網(wǎng)公司高大上的團(tuán)隊配置(俺只熟悉C)、也沒有雄厚的資金支持購買強勁的服務(wù)器(俺只有一臺單核、半G內(nèi)存、1M帶寬的阿里云最低配主機),所以只能利用最熟悉的C、利用最有限的硬件資源來玩玩微信公眾號了,如果選擇JAVA估計連跑起來都成問題。

        無論用什么語言,首先都要評估所要做的項目的技術(shù)背景和技術(shù)原理,只要是開放接口都與實現(xiàn)無關(guān),采用C語言,雖然沒有大量現(xiàn)成的庫可以直接調(diào)用,但經(jīng)過評估,自己研發(fā)成本并不大。之前我專門研究了whois爬蟲技術(shù),可以把這個作為第一個功能提供給用戶使用。于是開搞!

        元旦花了一天研究了微信公眾平臺開發(fā)者文檔,撰寫測試代碼以評估接口,確定設(shè)計,又花了一天做開發(fā)測試,“鈦搜索”新鮮上線,第一版提供了域名注冊信息實時查詢,而后某個工作日晚上又把框架部分和應(yīng)用部分分離,把框架提煉出來封裝成C庫,方便做其它公眾號,同時也分享給大家研究使用。

        2    架構(gòu)與設(shè)計

        2.1    體系架構(gòu)

        通過學(xué)習(xí)微信公眾平臺開發(fā)者文檔,我的微信公眾號應(yīng)用服務(wù)器接入架構(gòu)應(yīng)該是這樣的。其中微信客戶端可以是手機、PC等,微信服務(wù)端其實只做了驗證我的應(yīng)用服務(wù)器地址,然后大量轉(zhuǎn)發(fā)客戶端請求功能,對于我要做的只是自己找網(wǎng)上主機空間搭建一個Web服務(wù)器,根據(jù)開放接口開發(fā)相應(yīng)服務(wù)對接騰訊微信服務(wù)端即可。

        幸運的是,前段時間我剛好買了一個阿里云主機,雖然是低的不能再低的配置(沒錢啊),但跑跑C程序是毫無問題。

        2.2    系統(tǒng)架構(gòu)

        既然采用C技術(shù)環(huán)境,CGI是板上釘釘,但傳統(tǒng)的CGI存在頻繁創(chuàng)建、銷毀進(jìn)程的系統(tǒng)壓力,那就使用FastCGI吧。

        本人曾經(jīng)研發(fā)過基于事件模型(epoll in Linux)的服務(wù)器軟件,感覺要完全寫好事件模型還是比較復(fù)雜,于是對Nginx的穩(wěn)定性感覺不是很有信心,還是采用老而彌堅的Apache。至于你的選擇,只要你的Web服務(wù)器軟件支持FastCGI就能使用weixin4c。

        暫時還用不到數(shù)據(jù)庫或緩存服務(wù)器,以后用到了再加。

        總結(jié):支持FastCGI的Web服務(wù)器軟件+FastCGI(C)模塊+(你的應(yīng)用).fcgi(weixin4c.a)。(這恐怕是世界上執(zhí)行效率最高的基于高級語言的Web技術(shù)方案了吧,呵呵呵,開發(fā)效率么...我有大量自己寫的、第三方的庫,不比JAVA、PHP開發(fā)慢哦 ^_^)

        2.3    應(yīng)用結(jié)構(gòu)

        公眾號應(yīng)用服務(wù)器對接微信服務(wù)器的第一步是讓微信服務(wù)器認(rèn)證自己的網(wǎng)址是否有效,具體參見微信公眾平臺開發(fā)文檔。

        一旦認(rèn)證成功,你的應(yīng)用服務(wù)就算接入微信了,接下去就可以互相收發(fā)信息。

        比較常見的是微信客戶端上發(fā)送文本、圖片、語音、視頻、地理位置信息等,微信服務(wù)器轉(zhuǎn)發(fā)給你的應(yīng)用服務(wù)器,應(yīng)用服務(wù)器處理后產(chǎn)生響應(yīng)信息,回復(fù)給微信客戶端。

        還有一些是公眾號應(yīng)用服務(wù)器主動發(fā)送微信服務(wù)器,微信服務(wù)器轉(zhuǎn)發(fā)給微信客戶端,由于安全原因,微信服務(wù)器需要公眾號應(yīng)用服務(wù)器事先通過獲取的接口調(diào)用憑據(jù)來驗證發(fā)送者身份。

        這種模式放到后面再說,前一種模式的weixin4c內(nèi)部設(shè)計結(jié)構(gòu)如下:

        (在word里顯示有點小,你可以直接看源碼安裝包里的"doc/weixin4c.vsd")

        Web服務(wù)器進(jìn)程根據(jù)微信服務(wù)端轉(zhuǎn)發(fā)的請求,調(diào)起應(yīng)用demo.fcgi(你可以改成"(你的公眾號應(yīng)用名).fcgi"),main函數(shù)里設(shè)置一些環(huán)境常量和回調(diào)函數(shù)指針,然后調(diào)用weixin4c.a入口函數(shù)weixin4c,weixin4c前半部分實現(xiàn)了一個FastCGI基本框架,后半部分實現(xiàn)了微信公眾號請求信息接收、篩選、分支調(diào)用的通用層框架,公眾號應(yīng)用處理邏輯由demo.fcgi回調(diào)函數(shù)來掛接實現(xiàn)。

        目前實現(xiàn)的回調(diào)函數(shù)接口有:

        • 進(jìn)程初始化函數(shù)(FastCGI長進(jìn)程啟動時執(zhí)行一次,像打開redis連接、打開數(shù)據(jù)庫連接啥啥的都可以塞這里面)

        • 進(jìn)程銷毀前清理函數(shù)(FastCGI長進(jìn)程結(jié)束時執(zhí)行一次,其實應(yīng)用不釋放也會被系統(tǒng)釋放,但有些應(yīng)用層正常關(guān)閉操作最好還是做一下,如斷開數(shù)據(jù)庫連接)

        • 接收事件(訂閱/關(guān)注、取消訂閱/關(guān)注)處理函數(shù)

        • 接收文本處理函數(shù)(當(dāng)微信客戶端發(fā)送消息時觸發(fā),可以用作命令的響應(yīng))

        • 接收圖片處理函數(shù)(以下有些響應(yīng)報文布局可能會有些問題)

        •  接收語音處理函數(shù)

        • 接收視頻處理函數(shù)

        • 接收小視頻處理函數(shù)(以上有些響應(yīng)報文布局可能會有些問題)

        • 接收地理信息處理函數(shù)

        • 接收鏈接處理函數(shù)

        備注:為什么采用靜態(tài)庫libweixin4c.a而不采用動態(tài)庫呢?因為如果采用動態(tài)庫,需要設(shè)置一大堆CGI環(huán)境變量,干脆就采用靜態(tài)庫,這樣減少框架層運行時庫依賴,方便使用。

        總結(jié):"weixin4c.a"只是實現(xiàn)了一個微信公眾號分揀引擎,由cgi可執(zhí)行程序"(你的應(yīng)用名).fcgi"中的main函數(shù)調(diào)用,main函數(shù)同時還會傳遞一批回調(diào)函數(shù)指針進(jìn)去,供"weixin4c.a"分揀引擎確定請求報文類型后回調(diào),就醬紫,很簡單吧 ^_^

        (具體見doc/weixin4c.doc、doc/weixin4c.vsd)

        瀏覽 23
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲AV成人无码精品区国内 | 欧美一级特黄真人做受 | 欧美一级免费黄片 | 奇米网久久 | 欧美人人操 | 国产目拍亚洲精品99久久精品 | 爽娇妻快高h绿帽王大牛 | 揉我胸啊嗯出水了啊 | 一级a生活片 | 国产哺乳奶水91PORNY |