JasonChatroom学习笔记
今天跟着博主 科技7C100 做一个简单的 chatroom.
在 Unity 前端页面,设置了 Scroll View 来显示聊天内容,一个 InputField 来输入信息,还有两个按钮用于链接和发送。
在设计脚本之前,我们需要了解网络编程的基础知识

以下内容摘自 http://www.cnblogs.com/skynet/
网络中进程之间如何通信
网络通信首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程 PID 来唯一标识一个进程,但是在网络中这是行不通的。其实 TCP/IP 协议族已经帮我们解决了这个问题,网络层的 “ip 地址” 可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组( ip 地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
使用 TCP/IP 协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和 UNIX System V 的 TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用 socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆 socket ”。
什么是Socket
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写 write/read –> 关闭 close”模式来操作。我的理解就是 Socket 就是该模式的一个实现,socket 即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写 IO、打开、关闭)

前端设计
在Connect()方法中,我们这样设计
Recevie()是(同步阻塞方式), 注意使用同步方法时,需要使用线程来开始方法,不然服务器不发送任何信息的话,Unity界面会卡死
这里使用使用BeginReceive(异步)
我们继续看Send的内部实现
这里写一下回调方法
重要的知识点来了!
Unity里的UI组件或者是其他仅仅存活于Unity生命周期中的组件,只在Unity主线程内执行
由此引出了消息队列的妙用,请看GameManager.cs
到这里,我们的前端设计就基本完成了,来看看后端设计吧
后端设计
后端设计就是服务器端的设计,这里我们使用C#的Socket类来实现
还有我们需要用到的回调函数
这里建立了一个 ClientInfo 类用于管理数据和客户端 socket. 非常方便
当然,聊天室不是一个人的网络备忘录,必然会出现多个客户端链接的情况,所以有必要new 一个 List 存储客户端信息。
到这里,Jason网络聊天室的基本功能就实现了。

本文作于2023-08-12,首发于个人博客https://rdququ.top/