使用TCP實(shí)現(xiàn)單聊群聊:

我們使用TCP實(shí)現(xiàn)單聊群聊坐桩,不過(guò)按我的經(jīng)驗(yàn)瘟斜,你最好先把當(dāng)前項(xiàng)目的UDP實(shí)現(xiàn)的整個(gè)項(xiàng)目備份一次以防萬(wàn)一冬三。


一. 單聊群聊全部使用TCP完成:

所謂單聊就是兩個(gè)設(shè)備的互相通信,這個(gè)正是TCP的專項(xiàng)燎字。

群聊的情況下腥椒,因?yàn)槲覀兪枪潭ǔ蓡T阿宅,固定用戶數(shù)量且最多12位同WIFI用戶,完全可以使用單聊TCP實(shí)現(xiàn)群聊笼蛛,這樣還可以避免很多復(fù)雜的丟包掉線的問(wèn)題洒放。


(1)疑問(wèn)1: 假設(shè)IP他們有變動(dòng)怎么辦?

首先滨砍,可以確定他們能通過(guò)紀(jì)律要求實(shí)現(xiàn)IP固定往湿,假設(shè)真有變動(dòng),我們討論過(guò)這個(gè)情況惋戏,可以把IP范圍做成某種配置领追,用戶可以統(tǒng)一修改配置(這后面遇到再說(shuō))


(2)單聊TCP需要長(zhǎng)連接嗎?

目前感覺(jué)不需要响逢,按需連接绒窑。需要給誰(shuí)發(fā)就連接誰(shuí)。


(3)TCP連接斷開(kāi)了怎么處理舔亭?

需要寫一個(gè)工具類些膨,TcpTool,給一個(gè)ip地址連接對(duì)方钦铺,連接成功后订雾,保存這個(gè)連接對(duì)象下次直接使用,需要在工具類的內(nèi)部處理以下情況:

a.?連接指定ip矛洞,如果ip對(duì)應(yīng)本地沒(méi)有歷史連接對(duì)象葬燎,創(chuàng)建連接對(duì)象,假設(shè)創(chuàng)建失敗缚甩,說(shuō)明對(duì)方不在線。終止發(fā)消息窑邦。如果成功擅威,可以發(fā)消息。

b. 連接指定ip冈钦,如果ip對(duì)應(yīng)本地有歷史連接對(duì)象郊丛,直接返回使用。

c.?連接指定ip瞧筛,如果ip對(duì)應(yīng)本地有歷史連接對(duì)象厉熟,直接使用,遇到對(duì)方又掉線较幌,需要清除本地連接對(duì)象揍瑟,然后回到步驟a.

所以這個(gè)方法,如果是我來(lái)寫乍炉,大概長(zhǎng)這樣:

function sendMessageToIP(ip: ?String, ?message: String, ?closure: Huidiao) {

? ? let link = this.linkMap[ip] //從歷史中取

? ? if(link == null){ //歷史中沒(méi)有

? ??????link = createLink(ip) ?//創(chuàng)建指定ip的連接

? ? ? ??this.linkMap[ip] = link //記錄到本地绢片,下次使用

?? ? }

? ? if(link.error){ ?//這個(gè)連接有錯(cuò)誤

? ??????this.linkMap[ip] = null //清空錯(cuò)誤無(wú)用的記錄

? ? ? ?closure(101,"連接錯(cuò)誤") //回調(diào)拋出錯(cuò)誤

? ? ? }else{ ?//連接正常滤馍,直接發(fā)消息

????????link.sendMessage(message)? ? ? ??

? ??????closure(102,"發(fā)送成功") //回調(diào)拋出錯(cuò)誤

? ? ? ?}

}


(4)群聊怎么發(fā)群發(fā)消息?

遍歷群成員底循,for循環(huán)單個(gè)發(fā)消息巢株。


(5)我怎么區(qū)分單聊群聊消息?如何顯示單聊群聊數(shù)據(jù)熙涤?

這個(gè)非常簡(jiǎn)單阁苞,收到消息后,數(shù)據(jù)里面有各種字段標(biāo)明這是單聊還是群聊祠挫,數(shù)據(jù)來(lái)了直接存入數(shù)據(jù)庫(kù)那槽,然后從數(shù)據(jù)庫(kù)讀取最新數(shù)據(jù)就可以了。數(shù)據(jù)來(lái)了不要直接刷新到UI茸歧,一定是先存入數(shù)據(jù)庫(kù)倦炒,然后數(shù)據(jù)庫(kù)根據(jù)各種單聊用戶ID或者群聊群ID自動(dòng)篩選得到正確的數(shù)據(jù)。


(6)需要每個(gè)人需要?jiǎng)?chuàng)建12*12個(gè)鏈接嗎软瞎?

不需要逢唤,首先,A連接B成功后涤浇,B自動(dòng)連接A成功鳖藕,兩者可以互發(fā)消息,公平對(duì)等只锭。

其實(shí)不需要一來(lái)就各種互聯(lián)著恩,按上面的說(shuō)明,可以需要給誰(shuí)發(fā)再來(lái)連不晚蜻展,這個(gè)連接很快喉誊。

可能需要你實(shí)際操作感受下才能更好的理解。


單聊TCP + 數(shù)據(jù)庫(kù)直接搞定所有問(wèn)題纵顾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伍茄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子施逾,更是在濱河造成了極大的恐慌敷矫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汉额,死亡現(xiàn)場(chǎng)離奇詭異曹仗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蠕搜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門怎茫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妓灌,你說(shuō)我怎么就攤上這事遭居√淦鳎” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵俱萍,是天一觀的道長(zhǎng)端壳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)枪蘑,這世上最難降的妖魔是什么损谦? 我笑而不...
    開(kāi)封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮岳颇,結(jié)果婚禮上照捡,老公的妹妹穿的比我還像新娘。我一直安慰自己话侧,他們只是感情好栗精,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瞻鹏,像睡著了一般悲立。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上新博,一...
    開(kāi)封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天薪夕,我揣著相機(jī)與錄音,去河邊找鬼赫悄。 笑死原献,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的埂淮。 我是一名探鬼主播姑隅,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼倔撞!你這毒婦竟也來(lái)了粤策?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤误窖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秩贰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體霹俺,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毒费,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丙唧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觅玻,死狀恐怖想际,靈堂內(nèi)的尸體忽然破棺而出培漏,到底是詐尸還是另有隱情,我是刑警寧澤胡本,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布牌柄,位于F島的核電站,受9級(jí)特大地震影響侧甫,放射性物質(zhì)發(fā)生泄漏珊佣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一披粟、第九天 我趴在偏房一處隱蔽的房頂上張望咒锻。 院中可真熱鬧,春花似錦守屉、人聲如沸惑艇。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滨巴。三九已至,卻和暖如春碰镜,著一層夾襖步出監(jiān)牢的瞬間兢卵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工绪颖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秽荤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓柠横,卻偏偏與公主長(zhǎng)得像窃款,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牍氛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355