【发布时间】:2015-06-05 12:51:04
【问题描述】:
我正在我的 Unity3D 游戏中实现一个 TCP 客户端,我想知道在不等到前一个调用完成写入的情况下调用 NetworkStream.BeginWrite 是否真的安全。
根据我在阅读文档时的理解,在我不在不同线程中执行并发 BeginWrite 调用之前是安全的(并且 Unity 只有一个线程用于游戏主循环)。
对于我的阅读,我在与异步回调建立连接后立即调用 BeginRead,在异步回调中,我从 TcpClient.GetStream() 读取传入数据,将其放入带有 lock(readMemoryStream) 的单独 MemoryStream,然后再次运行 BeginRead。除此之外,在我的 Update() 函数中(在主游戏线程中)我检查 readMemoryStream 中的新数据,检查可靠消息并将其解包(当然使用相同的锁(readMemoryStream))并在基于来自服务器的消息的游戏对象。
这种方法行得通吗? BeginRead 不会干扰 BeginWrite 吗? 再次,我使用回调线程读取数据和主线程写入。
【问题讨论】: