李錦濤
摘 要 21世紀(jì)是信息的世紀(jì),交流便是獲取信息最簡(jiǎn)單而快捷的方式。本文旨在解決在初次見(jiàn)面、匿名溝通等場(chǎng)合下,人們之間交流難以暢所欲言的情景。本文以Nodejs技術(shù)搭建了一個(gè)全開(kāi)放式的匿名聊天交流平臺(tái)。其中,采用express技術(shù)搭建Web服務(wù)器,任何用戶通過(guò)瀏覽器向后臺(tái)發(fā)起http請(qǐng)求,便能接收到一個(gè)大幕布,大幕布可匿名呈現(xiàn)所有用戶的相關(guān)聊天信息;采用微信公眾號(hào)作為中轉(zhuǎn)站,所有關(guān)注該特定公眾號(hào)并向該公眾號(hào)發(fā)送的信息,均由微信后臺(tái)服務(wù)器轉(zhuǎn)到筆者搭建的后臺(tái)服務(wù)器,然后再通過(guò)Websocket技術(shù)廣播到所有的大幕布中。如此,人們之間的交流方式既有了匿名的保障,同時(shí)又開(kāi)放式的呈現(xiàn)所有用戶的聊天內(nèi)容,從而達(dá)到良好溝通、表達(dá)個(gè)人意愿的目的。
關(guān)鍵詞 Websocket;node.js;微信墻;交流平臺(tái)
中圖分類號(hào) TP3 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào) 1674-6708(2018)204-0153-03
隨著科技的飛速發(fā)展,人們的通訊方式也變得更加便捷。根據(jù)美國(guó)市場(chǎng)研究公司IDC的報(bào)告,2017年全球智能手機(jī)出貨量達(dá)到15.2億部,而中國(guó)智能手機(jī)的出貨量達(dá)到4.6億部,針對(duì)年輕人群來(lái)說(shuō),幾乎人人手持一部智能手機(jī)。由于手機(jī)實(shí)時(shí)通訊軟件的便利,人們交換信息的方式更多的是選擇在手機(jī)端完成。
在中國(guó),騰訊的兩款明星產(chǎn)品,微信和QQ已經(jīng)霸占了市場(chǎng)上實(shí)時(shí)通訊軟件的老大位置。據(jù)騰訊官網(wǎng)報(bào)道,2017年微信的月活躍賬戶數(shù)到9.63億,QQ的月活躍賬戶數(shù)則說(shuō)8.50億。人們智能手機(jī)上幾乎都裝有這兩款實(shí)時(shí)通訊軟件,每天與認(rèn)識(shí)的朋友和不太熟悉的朋友進(jìn)行信息之間的交流。
然而,微信與QQ這兩款流行的實(shí)時(shí)通訊軟件在眾多場(chǎng)合下并不具備信息的匿名和信息的全開(kāi)放式,人們之間的交流受到或多或少的局限。在信息的匿名方面上,例如在班級(jí)選舉上,采用同學(xué)建QQ群或者微信群,然后大家在群里進(jìn)行討論、交流、投票。這顯然不是一個(gè)特別合適的舉動(dòng),因?yàn)榈K于情面,同學(xué)們大都回避以公開(kāi)的身份來(lái)討論誰(shuí)的優(yōu)缺點(diǎn),以及是不是該投他一票;又比如,在新生見(jiàn)面交流會(huì),或者班級(jí)討論會(huì),一些內(nèi)向的學(xué)生在新的環(huán)境下,很難站出來(lái)表達(dá)自己的觀點(diǎn)。如果,能夠在開(kāi)放式的平臺(tái)下,選擇匿名的方式暢所欲言,對(duì)它們而言或許是一個(gè)更好的選擇。此外,在信息的全開(kāi)放式方面上,例如家人想了解一下自己的孩子在學(xué)校生活一些討論會(huì),或者某些公開(kāi)場(chǎng)合下的交流情況的時(shí)候,不太可能讓家人加入各種微信群或者QQ群,那么家人就無(wú)法獲取同學(xué)們的聊天信息。針對(duì)這種公開(kāi)的場(chǎng)合和活動(dòng),如果能過(guò)讓眾多家長(zhǎng)獲取孩子在學(xué)習(xí)的表現(xiàn),不僅增加了長(zhǎng)備與孩子之間的話題,也讓家人對(duì)孩子的成才給點(diǎn)自己的建議。
為了解決目前市面上實(shí)時(shí)通訊系統(tǒng)在匿名方式和全開(kāi)放式方面上,人們交流方式潛在的不適應(yīng)性,本文基于Nodejs搭建一個(gè)全開(kāi)放式匿名交流的平臺(tái),在特定場(chǎng)合下,全方面的滿足人們之間獲取信息、交換信息的便利性。其中,本系統(tǒng)應(yīng)該具備以下兩個(gè)主要特點(diǎn):1)對(duì)所有用戶全方位開(kāi)放:任何用戶可以隨時(shí)在平臺(tái)上獲取當(dāng)前所有用戶討論的最新消息;2)對(duì)發(fā)布信息的所有者實(shí)時(shí)匿名,以保障個(gè)人信息不被泄露。
1 系統(tǒng)總體框架設(shè)計(jì)
本文采用Nodejs[1-2]搭建了后臺(tái)服務(wù)器,其中Web端采用express框架編寫。如圖1所示,用戶通過(guò)智能手機(jī)(Android系統(tǒng)或者蘋果系統(tǒng))關(guān)注某個(gè)特定微信公眾號(hào)來(lái)與后代服務(wù)器綁定,微信后臺(tái)服務(wù)器作為用戶與我搭建的后臺(tái)服務(wù)器的中轉(zhuǎn)橋梁。具體通訊流程如下:
首先,任何用戶可以在任何有網(wǎng)絡(luò)資源的地方通過(guò)瀏覽器訪問(wèn)后臺(tái)服務(wù)器(向服務(wù)器118.190.27.173:8000發(fā)送http請(qǐng)求,其中端口號(hào)為8000);此時(shí),后臺(tái)服務(wù)器返回給用戶一個(gè)大幕布,即html頁(yè)面,該頁(yè)面包含了后臺(tái)服務(wù)器進(jìn)行Websocket通信的代碼。
其次,進(jìn)行微信公眾號(hào)與后臺(tái)服務(wù)器進(jìn)行綁定綁定,即往該特定公眾號(hào)發(fā)送的所有內(nèi)容均被微信公眾號(hào)服務(wù)器所管理,然后再轉(zhuǎn)給我自己搭建的后臺(tái)服務(wù)器。
最后,所有關(guān)注該特定微信公眾號(hào)的用戶,往微信公眾號(hào)發(fā)送信息,均間接轉(zhuǎn)到搭建的后臺(tái)服務(wù)器,然后通過(guò)Websocket的方式,廣播給所有打開(kāi)大幕布的用戶。
2 主要模塊介紹
2.1 express模塊
Express[3]模塊是一個(gè)基于Nodejs平臺(tái)的簡(jiǎn)化版Web應(yīng)用開(kāi)發(fā)框架,可以用短短幾行代碼搭建一個(gè)簡(jiǎn)易版的Web平臺(tái),可以影響http的請(qǐng)求,并返給瀏覽器一個(gè)html的頁(yè)面,在本文中,則是返回一個(gè)大幕布,可以匿名呈現(xiàn)用戶者的聊天信息。其中,在Nodejs中采用npm包管理模塊來(lái)統(tǒng)一管理開(kāi)源的第三方包。因此,可以采用npm來(lái)下載express相應(yīng)的包,命令如下:
npm install expresss--save和npm install express-generator
用了短短9行的代碼,便成功搭建了一個(gè)迷你型的web后臺(tái)服務(wù)器。其中,代碼概要解釋如下:
1)var express =require(‘express);
2)var app=express();
3)app.use(express.static(__dirname+/ client));
4)app.use(function (req,res){
5)res.sendFile(__dirname+/client/ index.html)});
6)var server=app.listen(8000, function() {
7)console.log(‘a(chǎn)pp is running at port 8000?。?;});endprint
第1行,引入剛剛才有npm包管理器下載好的express包;
第2行,實(shí)例化express對(duì)象,并命名為app變量;
第3行,掛載本地靜態(tài)文件目錄,其中大幕布html文件就放置在其目錄下;
第4~5行,掛載一個(gè)匿名函數(shù),該函數(shù)監(jiān)聽(tīng)客戶端的http請(qǐng)求,若用戶在瀏覽器發(fā)起http請(qǐng)求,則調(diào)用該函數(shù),并完成將本地靜態(tài)文件路徑下的大幕布html文件(即index.html)返回給用戶。此時(shí),用戶可以收到一個(gè)干凈的大幕布,里面還沒(méi)有顯示用戶者的聊天內(nèi)容。
第6~7行:開(kāi)啟Web服務(wù)器的監(jiān)聽(tīng),監(jiān)聽(tīng)的端口號(hào)為8000。因?yàn)樵摲?wù)器的IP地址為118.190.27.173,Web監(jiān)聽(tīng)的端口號(hào)為8000。因此,如果用戶在瀏覽器發(fā)起http://118.190.27.173:8000的請(qǐng)求,Web服務(wù)器便能實(shí)時(shí)響應(yīng)。
2.2 Websocket
Websocket[4-5]是一種應(yīng)用層協(xié)議,旨在為web應(yīng)用程序客戶端和服務(wù)器之間提供一種全雙工的通信機(jī)制。本項(xiàng)目中,由大幕布html網(wǎng)頁(yè)向后臺(tái)服務(wù)器發(fā)起websocket通信,具體代碼如下:
v a r w s = n e w W e b S o c k e t (‘ws://118.190.27.173:9530);
ws.onmessage = function(event){
//do something
}
其中,采用9530端口號(hào)與后臺(tái)服務(wù)器進(jìn)行通信,ws為返回的對(duì)象。然后ws通過(guò)調(diào)用onmessage函數(shù)來(lái)監(jiān)聽(tīng)后臺(tái)服務(wù)器是否發(fā)生廣播事件(服務(wù)器后臺(tái)wss.Broadcast(data)來(lái)進(jìn)行廣播),若收到廣播的數(shù)據(jù),則數(shù)據(jù)保存在event變量中,然后進(jìn)行后續(xù)數(shù)據(jù)的處理。本項(xiàng)目中數(shù)據(jù)保護(hù)用戶的微信人頭像和用戶往特定微信公眾號(hào)發(fā)送的內(nèi)容,經(jīng)過(guò)簡(jiǎn)單后續(xù)處理,以倒序的形式顯示在大幕布中。
3 項(xiàng)目效果展示
首先,在瀏覽器中發(fā)起http://118.190.27.173:8000請(qǐng)求,此時(shí)后臺(tái)服務(wù)器監(jiān)聽(tīng)到8000端口有用戶發(fā)來(lái)的http請(qǐng)求,便響應(yīng)客戶端的請(qǐng)求,返回一個(gè)html頁(yè)面,即一個(gè)空白的大幕布。
接著,同時(shí)關(guān)注了yezhenxu001的接口測(cè)試號(hào)的用戶A和用戶B開(kāi)始往公眾號(hào)發(fā)送消息,具體內(nèi)容如圖2所示,此時(shí)微笑公眾號(hào)后臺(tái)將消息轉(zhuǎn)發(fā)給我自己搭建的后臺(tái)服務(wù)器。值得注意的是,用戶A與用戶B是互相不認(rèn)識(shí)的,而且沒(méi)有互相添加為好友。
最后,大幕布可以實(shí)時(shí)更新呈現(xiàn)用戶之間的所有當(dāng)前聊天內(nèi)容,具體如圖3所示??梢钥闯觯脩鬉和用戶B的聊天記錄均在大幕布中所呈現(xiàn),而去用戶的個(gè)人信息得到了匿名,只能看到個(gè)人微信頭像。當(dāng)然如果想進(jìn)一步提高匿名的程度,可以把個(gè)人微信頭像給隱藏掉。如此一來(lái),一方面,用戶的個(gè)人隱私得到了有效的保障;另一方面,所有想關(guān)注用戶之間的相關(guān)聊天信息,可以通過(guò)向后臺(tái)服務(wù)器發(fā)起http請(qǐng)求,得到大幕布,然后展示用戶者的當(dāng)前聊天記錄。
4 結(jié)論
文章分析了當(dāng)前主流及時(shí)通信軟件微信和QQ在某些特定場(chǎng)合下不適應(yīng)的情況,并針對(duì)該場(chǎng)景設(shè)計(jì)了一款全開(kāi)放式匿名交流平臺(tái)。在實(shí)際應(yīng)用中,不僅方便了用戶之間匿名交流的需求,同時(shí)也極大地滿足了對(duì)該聊天內(nèi)容感興趣的用戶群體。因此,該平臺(tái)在用戶交流需求中具有較大的實(shí)際應(yīng)用價(jià)值。
參考文獻(xiàn)
[1]程桂花,沈煒,何松林,等.Node.js中Express框架路由機(jī)制的研究[J].工業(yè)控制計(jì)算機(jī),2016(8):101-102.
[2]崔瑩,劉兵.Node.js與Express技術(shù)在計(jì)算機(jī)課程教學(xué)中的應(yīng)用[J].軟件導(dǎo)刊,2016,15(9):190-192.
[3]http://www.expressjs.com.cn/ express官方網(wǎng)站.
[4]單振華,王舒憬,強(qiáng)杰.基于Websocket的智能家居遠(yuǎn)程控制系統(tǒng)的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2017,43(10):124-127.
[5]http://www.52im.net/thread-331-1-1.html“WebSocket詳解(一):初步認(rèn)識(shí)WebSocket技術(shù).endprint