我正在尝试将用Python / Tornado编写的游戏服务器移植到C#。我需要2个TCP异步监听器(具有多个客户端)和主游戏循环。处理这个问题的好方法是什么?
我现在找到了两种方法:
var gameListenerTask = Task.Run(() => {
//Run listener and wait
});
var lobbyListenerTask = Task.Run(() => {
// Run other listener.
});
Task.WaitAll(gameListenerTask, lobbyListenerTask);
或者:
var gameServiceTask = new Thread(() =>
{
var gameService = new GameService();
gameService.Start(15006);
});
var lobbyServiceTask = new Thread(() =>
{
var lobbyService = new LobbyService();
lobbyService.Start(15007);
});
gameServiceTask.Start();
lobbyServiceTask.Start();
小问题。如果我读到我正在使用:
handler.BeginReceive(client.Buffer, 0, Settings.ClientBufferSize,
SocketFlags.None, new AsyncCallback(client.ReadData), client);
Readed字节总是放在缓冲区的开头?
答案 0 :(得分:1)
要回答您的问题,您需要了解任务和线程之间的区别。
在this问题" Mitch Wheat"回答这个问题如下:
任务是你想做的事。
线程是执行该任务的众多可能的工作者之一。
在.NET 4.0术语中,Task表示异步操作。线程用于通过将工作分解为块并分配给单独的线程来完成该操作。
根据这个答案,你应该使用任务,比如" Sreemat"说。任务注定要使用" async"操作
你的小问题: 基于" BeginReceive"的description方法,我认为你是对的。