0

我正在与 Lidgren 一起设置游戏,我想知道是否有办法从某个客户端读取消息,而不仅仅是从整个服务器读取消息,例如-

//Why doesn't this exist?
NetIncomingMessage message = server.Connections[0].ReadMessage();

这样我就可以将来自每个客户端的读取数据拆分到它自己的线程中,并有一个单独的线程用于向每个客户端发送数据。目前我的服务器中只有一个循环,它读取数据包,我担心一个客户端比其他客户端更偏爱,因为玩家做出的一些动作需要一段时间才能被其他玩家接收。我相信分别从每个客户那里阅读消息可以解决这个问题。使用简单的 TcpClients,您可以从每个客户端的流而不是整个服务器中读取,我喜欢这个功能,但也依赖于通过 Lidgren 发送数据包的简单性,并且想知道 Lidgren 是否有类似的功能。

4

1 回答 1

0

您可以在一个线程上读取消息,然后将它们填充到并发安全集合中,例如,connection.Tag 消息。然后,每个单独的线程都会将该连接的消息出列。然而; 对于我认为是现有代码中的错误的问题,这听起来是一个非常糟糕的解决方案……没有理由在单个线程上读取消息会偏向于任何客户端;消息按照它们到达的确切顺序入队和出队。每个客户端执行一个线程会产生一大堆同步问题,您在处理收到的消息内容时必须解决这些问题;除非您有非常令人信服的理由,否则我会建议您反对。

于 2015-07-20T13:56:59.633 回答