我正在与Lidgren建立游戏,我想知道是否有办法从某个客户端而不是整个服务器中读取消息,例如 -
//Why doesn't this exist?
NetIncomingMessage message = server.Connections[0].ReadMessage();
通过这种方式,我可以将每个客户端的读取数据拆分为自己的线程,并有一个单独的线程将数据发送到每个客户端。目前我的服务器中只有一个循环,它读取数据包,我担心一个客户端比其他客户端更有利,因为玩家的一些动作需要一段时间才能被其他玩家接收。我相信与每个客户分开阅读邮件可以解决这个问题。使用简单的TcpClients,您可以从每个客户端的流而不是整个服务器中读取,我喜欢这个功能,但也依赖于通过Lidgren发送数据包的简单性,并且想知道Lidgren是否有类似的功能。
答案 0 :(得分:0)
您可以在一个线程上读取消息,然后将它们填充到例如connection.Tag消息中的并发安全集合中。然后,每个单独的线程将使该连接的消息出列。 然而;对于我认为是现有代码中的错误的问题,这听起来是一个非常糟糕的解决方案......没有理由在单个线程上阅读消息会有利于任何客户端而不是另一个客户端;消息按照它们到达的确切顺序排队并出列。 每个客户端执行一个线程会产生一大堆同步问题,在处理收到的消息内容时必须解决这些问题;除非你有一个非常令人信服的理由,否则我会反对它。