开发Unity网络模块时,一般会有异步(多线程同理)、多路复用两种方法。它们分别是什么,以及孰优孰劣呢?
在《Unity3D网络游戏实战(第2版)》的网络模块中,客户端使用了异步,服务端使用了多路复用。有读者问到为什么这么做,为什么不在客户端使用多路复用?这个问题很多人会遇到,决定写一篇文章说明这个问题。
先简单看看异步和多路复用是什么样子。
异步
异步程序的写法如下,会调用.net网络编程的API,使用BeginXXX和EndXXX这样的语法。实际上,程序内部会开启另外的线程去接收数据。
public class Echo : MonoBehaviour {
Socket socket;
//接收缓冲区
byte[] readBuff = new byte[1024];
public Start()
{
//Socket
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
//Connect
socket.Connect("127.0.0.1", 8888);
//BeginReceive
socket.BeginRec