簡易聊天室的制作

這兩天想回顧自己學(xué)過的內(nèi)容,所以重新寫了一下聊天室,就重新寫了一個(gè)小demo(我也不知道算不算,貌似有點(diǎn)大唉)茴扁。目的是為了熟悉和進(jìn)一步學(xué)習(xí)WebSocket,通過學(xué)習(xí)它,我希望能更加了解網(wǎng)絡(luò)編程汪疮。

它大概是這個(gè)樣子:

你先登陸峭火,就是你先輸入自己的名字,點(diǎn)一下按鈕智嚷,然后卖丸,就會(huì)出來一個(gè)界面:


界面太丑

你可以在write new message 下面輸入你想輸入的東西,就可以實(shí)現(xiàn)即時(shí)聊天啦盏道!


a加入聊天室


q加入聊天

這是a先加入聊天室稍浆,然后q加入,會(huì)再a的界面上有提示猜嘱。

然后就可以愉快的聊天了

是不是感覺還挺贊的衅枫?

好啦,先講講什么是WebSocket:

WebSocket的工作流程是這 樣的:瀏覽器通過JavaScript向服務(wù)端發(fā)出建立WebSocket連接的請(qǐng)求朗伶,在WebSocket連接建立成功后弦撩,客戶端和服務(wù)端就可以通過 TCP連接傳輸數(shù)據(jù)论皆。因?yàn)閃ebSocket連接本質(zhì)上是TCP連接,不需要每次傳輸都帶上重復(fù)的頭部數(shù)據(jù)点晴,所以它的數(shù)據(jù)傳輸量比輪詢和Comet技術(shù)小 了很多。我用了一個(gè)JavaScript frame ,它是socket.io粒督。socket.io能在Node.js的server端運(yùn)行并且能運(yùn)行在瀏覽器里陪竿,它吸收了websockets和其他規(guī)范之類,實(shí)現(xiàn)了客戶端與服務(wù)器端的交互屠橄。

下面就來實(shí)現(xiàn)它吧捐康!

one step 配置環(huán)境

Nodejs + webpack + react + express + http + socket.io + socket.io-client

這些npm install 一下嘍庸蔼!對(duì)啦,一定要在github上建一個(gè)倉庫啦贮匕!

tow step 想一下數(shù)據(jù)結(jié)構(gòu)啦

到底使用對(duì)象好呢還是使用數(shù)組好呢姐仅?后來我想著如果最后我要實(shí)現(xiàn)私聊的方式的話那我需要一個(gè)socket.id,所以我還是使用對(duì)象比較好刻盐,因此我是這樣想的:{'zyn':{'socket':'dZJa6Dl5M2O-tvBjAAAB'},...................},其實(shí)'socket'的那個(gè)key下的value值是每次相應(yīng)的socket自己生成的,這樣會(huì)方便找到一個(gè)人嘍敦锌!key值呢,就是你自己輸入的名字了乙墙。這樣可以實(shí)現(xiàn)對(duì)應(yīng)。

three step 服務(wù)器端到底怎么弄呢腥刹?


算了我截張圖

它主要是監(jiān)端口比較重要阿汉买!當(dāng)你使用express框架的時(shí)候,你必須引入socket.io監(jiān)聽是設(shè)置的端口蛙粘,這樣它才能夠接收到客戶端發(fā)送過來的消息,或者發(fā)送出你想要發(fā)給客戶端的消息穴肘。然后引入可執(zhí)行的socket.js文件,在這里面寫入函數(shù)梢褐。

four step 發(fā)送和接收

?其實(shí)代碼里就主要用了兩個(gè)方法:發(fā)送emit(),監(jiān)聽on();

?如果服務(wù)器端用了emit(),

socket.emit('add-user',{name: 'ass'});

那么客戶端要收到消息的話一定要有監(jiān)聽函數(shù):

socket.on('add-user',function(data){.........});

要注意的是要設(shè)置成相同的標(biāo)識(shí)赵讯,比如'add-user',才可以接收到相應(yīng)的消息盈咳”咭恚可以傳遞字符串,對(duì)象之類丈积。筐骇。江滨。接收或發(fā)送的數(shù)據(jù)可以用函數(shù)來處理。

反之依然告唆。。

five step react + socket.io怎么搞

其實(shí)最開始的時(shí)候我自己也搞得很暈擒悬,后來思考了之后才發(fā)現(xiàn)稻艰,react 只是視圖層啊!我應(yīng)該去先把需要呈現(xiàn)給用戶的數(shù)據(jù)處理好然后再呈現(xiàn)到用戶眼前的。這一點(diǎn)很重要的尊勿!

1.每當(dāng)一個(gè)用戶加入了之后,就將該用戶的名字添加到對(duì)象里面去拼弃,這樣可以讓每個(gè)連接該服務(wù)器的用戶來獲知當(dāng)前的用戶量摇展。

2.socket獲取的信息是放到state里面設(shè)置的值,有的時(shí)候是數(shù)組咏连,所以要使用組件嵌套才可以。

3.子組件和父組件的函數(shù)相互調(diào)用也是很重要的!

4.要搞清componentDidMount()的用法振惰。

最后呢垄懂,我有看過的幾個(gè)demo,可供學(xué)習(xí):

https://github.com/guille/chat-example.git

https://github.com/socketio/socket.io/tree/master/examples/chat

https://github.com/flashyy/ReactJS-Realtime-Chat

下面是我的代碼,求批評(píng)指正:

https://github.com/flashyy/mychat

下一次再改成有一對(duì)一私聊的啦~好吧桶蛔,允許我大笑三秒……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漫谷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碟婆,更是在濱河造成了極大的恐慌电抚,老刑警劉巖竖共,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件公给,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妓布,警方通過查閱死者的電腦和手機(jī)宋梧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門捂龄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倦沧,你說我怎么就攤上這事≌谷冢” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵扑浸,是天一觀的道長燕偶。 經(jīng)常有香客問我,道長酝惧,這世上最難降的妖魔是什么伯诬? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缺亮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萌踱。我一直安慰自己,他們只是感情好并鸵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布园担。 她就那樣靜靜地躺著,像睡著了一般弯汰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曙搬,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天鸽嫂,我揣著相機(jī)與錄音,去河邊找鬼据某。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挽唉,可吹牛的內(nèi)容都是我干的才避。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼棘劣,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼楞遏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寡喝,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巧骚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劈彪,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年痘括,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滔吠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翰舌,死狀恐怖冬骚,靈堂內(nèi)的尸體忽然破棺而出灶芝,到底是詐尸還是另有隱情唉韭,我是刑警寧澤犯犁,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站住诸,受9級(jí)特大地震影響涣澡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜入桂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一抗愁、第九天 我趴在偏房一處隱蔽的房頂上張望馁蒂。 院中可真熱鬧蜘腌,春花似錦、人聲如沸沮脖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涮因,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗜湃,已是汗流浹背澜掩。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刚陡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓筐乳,卻偏偏與公主長得像乔妈,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子路召,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容