2012-02-27 114 views
0

我使用的是TCP套接字上的网络Flash游戏工作(强制使用TCP B/C闪光灯)。游戏非常简单,因为它大多是基于文本的游戏。必须实施的唯一真正的同步是每个客户端的倒数计时器。这个计时器将在60秒开始,倒计数到0,并在0时发生一些游戏状态变化,所以重要的是所有的客户在相似的时间变为0。TCP - 客户机同步

我可以从我的服务器发送“开始倒计时”命令将所有客户和使用客户端的系统时钟,但如果数据包被丢弃或延迟,那么客户端能拿出来与他人同步。我也可以强制执行一些客户端/服务器协议,客户端必须每秒(或更少)与服务器“签入”,并且服务器强制执行所有客户端的同步。我对此的关注是效率。我的游戏是一个慢节奏的文本游戏,所以很可能客户端可能没有任何数据一次发送到服务器长达30秒。

它可能无法避免“经常入住”的情况,但我希望有人能给我一些有效的解决方案,以保持一个定时器在闪存应用程序中的多个客户端同步的指针。

在此先感谢。

P.S.我不认为NTP可以使用闪光灯。

回答

0

想象的情况时,一些客户的落后 - 你会怎么办?

我的意思是,想象一下,有一个完美的同步,但其中一个客户在倒计时期间离线。整个活动是否被取消,或其他客户仍然“参与”?

有视频流媒体服务器使用流媒体视频到Flash的机制。他们发一组固定大小无数次的数据包,并测量它需要来回奔波的时间(Flash客户端被认为过于有一个固定大小的数据包回复)。因此,这允许记录服务器时间和客户端之间存在的延迟。可能的话,你可以为每个客户建立一个查找表,并考虑到延迟发送消息 - 如果这还不够好...似乎落入科学研究类别,而不是游戏:)所以,也许要求用户安装额外的软件/插件不会是一个问题?

+0

感谢您的答复。我想知道这是否会起作用:我让服务器启动自己的计时器,然后告诉所有客户端在他们的系统上启动相同的计时器。然后,服务器会忽略定时器倒计时以后出现的任何客户端请求,以避免客户端被秒或2拒绝并发出无效请求。 – 2012-02-28 00:08:41