JasonChatroom學習筆記
今天跟著博主 科技7C100 做一個簡單的 chatroom.
在 Unity 前端頁面,設置了 Scroll View 來顯示聊天內容,一個 InputField 來輸入信息,還有兩個按鈕用于鏈接和發(fā)送。
在設計腳本之前,我們需要了解網絡編程的基礎知識

以下內容摘自?http://www.cnblogs.com/skynet/
網絡中進程之間如何通信
網絡通信首要解決的問題是如何唯一標識一個進程,否則通信無從談起!在本地可以通過進程 PID 來唯一標識一個進程,但是在網絡中這是行不通的。其實 TCP/IP 協(xié)議族已經幫我們解決了這個問題,網絡層的 “ip 地址” 可以唯一標識網絡中的主機,而傳輸層的“協(xié)議+端口”可以唯一標識主機中的應用程序(進程)。這樣利用三元組( ip 地址,協(xié)議,端口)就可以標識網絡的進程了,網絡中的進程通信就可以利用這個標志與其它進程進行交互。
使用 TCP/IP 協(xié)議的應用程序通常采用應用編程接口:UNIX BSD的套接字(socket)和 UNIX System V 的 TLI(已經被淘汰),來實現網絡進程之間的通信。就目前而言,幾乎所有的應用程序都是采用 socket,而現在又是網絡時代,網絡中進程通信是無處不在,這就是我為什么說“一切皆 socket ”。
什么是Socket
socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open –> 讀寫 write/read –> 關閉 close”模式來操作。我的理解就是 Socket 就是該模式的一個實現,socket 即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫 IO、打開、關閉)

前端設計
在Connect()方法中,我們這樣設計
Recevie()是(同步阻塞方式), 注意使用同步方法時,需要使用線程來開始方法,不然服務器不發(fā)送任何信息的話,Unity界面會卡死
這里使用使用BeginReceive(異步)
我們繼續(xù)看Send的內部實現
這里寫一下回調方法
重要的知識點來了!
Unity里的UI組件或者是其他僅僅存活于Unity生命周期中的組件,只在Unity主線程內執(zhí)行
由此引出了消息隊列的妙用,請看GameManager.cs
到這里,我們的前端設計就基本完成了,來看看后端設計吧
后端設計
后端設計就是服務器端的設計,這里我們使用C#的Socket類來實現
還有我們需要用到的回調函數
這里建立了一個 ClientInfo 類用于管理數據和客戶端 socket. 非常方便
當然,聊天室不是一個人的網絡備忘錄,必然會出現多個客戶端鏈接的情況,所以有必要new 一個 List 存儲客戶端信息。
到這里,Jason網絡聊天室的基本功能就實現了。

本文作于2023-08-12,首發(fā)于個人博客https://rdququ.top/