我在这里有点难题要解决。
您有一个时间戳作为参数传递给服务器。例如,2012-5-10 14:55。如果30秒从给定的时间中流逝并返回true或false,您将如何判断?
规则:
。
在ColdFusion 9中,这是怎么可能的(如果有的话)?
发布于 2012-05-10 15:59:26
嗯……你的问题是你不知道延迟。您可以从收到时间戳的时间起计算30秒,但这可能是创建时间戳之后的秒。
你可以很容易地数到30秒。
sleep(30000); //1000 miliseconds = 1 second. 30k = 30 seconds因此,一旦得到变量,您就可以“等待”30秒,然后做一些事情。但是从你的问题来看,从时间戳(在客户端上创建)开始,你需要精确的30秒。你可能不能这么精确,因为:
如果您可以指定一个HTML5浏览器,您可以使用websockets来实现它--它实际上是在乞求:),但这是我能想到的唯一真正的解决方案。
发布于 2012-05-10 23:32:03
您没有指定传递给服务器的参数是API请求、表单提交或ajax请求等等,因此在另一端的实现会有所不同。但是,ColdFusion服务器端应该非常相似,基本上包含三个问题:时区、时差和延迟。
要解决时区问题,可以要求将参数作为UTC时间传递。当你将时间和寒冷相比较时,你会做如下的事情:
<cfif DateDiff("s", Variables.PassedTimestamp, DateConvert( "Local2UTC", Now() )) EQ 30>
<!--- Exactly 30 seconds difference between timestamps --->
</cfif>但是您不知道发送给您的时间是否与服务器上的时间同步。为了帮助这一点,您可以为另一端提供一种方法来查询您的时间,或者相应地调整他们的时间,或者用他们自己的时间回显您的时间。
时间同步和最初讨论的时间戳发送都会受到延迟的影响。网络上的任何通信都会受到延迟的影响,只是延迟程度不同。位置和Internet连接类型可能比协议类型有更大的影响。您可以执行一些操作,比如敲击另一端以获得响应时间,然后将响应时间减半并将其添加到时间戳中,但这仍然是一个近似,并不是所有的服务器都会响应ping。
此外,服务器和另一端的代码也会引入延迟。为了减少这一点,您希望另一端尽可能接近请求的末尾计算时间戳,并希望您的代码尽快计算时间戳。这可以用ColdFusion来完成,方法是尽可能将请求时间设置在Application.cfm|cfc顶部附近。
<cfset Request.Now = Now()>然后将检查代码更改为:
DateDiff("s", Variables.PassedTimestamp, DateConvert( "Local2UTC", Request.Now ))相反,如果您希望循环到30秒之后再响应,请注意您的响应在30秒后似乎不会发生,因为延迟会将响应延迟回另一端。
得到准确的30秒是不可能的,但你采取的步骤将使你的距离更近。如果你只需要看看大约30秒过去了,那就足够了。
https://stackoverflow.com/questions/10537503
复制相似问题