我正在和Lidgren设置一个游戏,我想知道是否有一种方法可以从某个客户端读取消息,而不仅仅是从整个服务器读取消息,例如-
//Why doesn't this exist?
NetIncomingMessage message = server.Connections[0].ReadMessage();这样,我就可以将从每个客户端读取数据的操作拆分到它自己的线程中,并拥有一个单独的线程来向每个客户端发送数据。目前在我的服务器中只有一个循环,它读取数据包,我担心比其他客户端更偏爱一个客户端,因为玩家的一些动作需要一段时间才能被其他玩家接收到。我相信分别从每个客户端读取消息会解决这个问题。使用简单的TcpClients,您可以读取每个客户机流而不是整个服务器,我喜欢这个功能,但也依赖于通过Lidgren发送数据包的简单性,我想知道Lidgren是否有类似的功能。
发布于 2015-07-20 21:57:00
您可以在一个线程上读取消息,然后将它们填充到并发安全集合中,例如,connection.Tag消息。然后,每个单独的线程将该连接的消息出队。然而,对于一个我认为是现有代码中的bug的问题,这听起来是一个非常糟糕的解决方案……没有理由在单个线程上读取消息会使任何客户端优先于另一个客户端;消息按到达的确切顺序入队和出列。为每个客户端执行一个线程将创建一大堆同步问题,您在处理收到的消息内容时必须解决这些问题;除非您有非常令人信服的理由,否则我建议您不要这么做。
https://stackoverflow.com/questions/31497064
复制相似问题