我目前正在研究简单的 2D等距多人RPG 。
我有几个客户端和一个主服务器,它们仅通过TCP/IP Socket
连接来接收和发送数据。
现在我偶然发现了一个问题:
PlayerMovement
更新,大约30次,每个信息包都被接收并分发如果有人需要代码片段,我可以上传它们!
我希望有人可以帮助我:)
我已经将写入器缓冲区大小设置为512,将接收器缓冲区大小设置为4096。
服务器:
foreach (ServerClient sc in clients)
{
// Is the client still connected?
if (!IsConnected(sc.tcp))
{
sc.tcp.Close();
disconnectList.Add(sc);
continue;
}
else
{
NetworkStream s = sc.tcp.GetStream();
if (s.DataAvailable)
{
StreamReader reader = new StreamReader(s, System.Text.Encoding.Default, true, 8192);
Task<string> dataTask = reader.ReadLineAsync();
sc.tasks.Add(dataTask);
}
sc.RunTasks(this);
}
}
->服务器RunTasks方法:
public void RunTasks(MasterServer server)
{
if(tasks.Count > 0)
{
if (tasks[0] != null && tasks[0].IsCompleted)
{
string data = tasks[0].Result;
if (data != null)
server.OnIncomingData(this, data);
tasks[0].Dispose();
tasks.RemoveAt(0);
}
}
}
客户:
// Sending messaged to the server
public void Send(string data)
{
if (!socketReady)
return;
writer.WriteLine(data);
writer.Flush();
}