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