当我拥有的是他们的IP地址时,有没有办法找到用户所在的时区?我正在寻找我需要应用于服务器时间的时间偏移量,以便找到用户位置的时间.
我正在处理与我正在进行的多玩家同步游戏同时使用共享集合的问题.我做了一些挖掘,在Alexey Drobyshevsky关于codeproject的帖子中发现了一个整洁的线程安全的IEnumerator/IList实现:
http://www.codeproject.com/KB/cs/safe_enumerable.aspx
在采用他的实现后,我甚至用for/foreach循环替换了共享集合上的所有Linq查询,因为Linq查询仍在使用下面的不安全的IEnumerable.
这是我对SafeList的实现,列表本身作为消费类的ReadOnlyCollection公开.
http://theburningmonk.com/2010/03/thread-safe-enumeration-in-csharp/
切换到这个SafeList之后,我看到的问题要少得多,但是在负载很重的情况下(80多个线程都在不同的点读取/写入列表)我仍然看到抛出InvalidOperationException:
元素列表已更改.枚举操作无法继续
我甚至尝试使用ReadWriterLockSlim来代替我在SafeList实现中的锁对象,但事实证明这也没有结果.到目前为止,我唯一的另一个建议是每次线程需要循环时克隆列表.我希望避免每次都克隆列表,因为列表的使用方式太多,可能会影响性能并可能引入其他难以发现的错误.
由于时间限制,我不得不务实一下,如果克隆是去解决这个问题,然后,我与它的罚款最安全快捷的方式,但采取这种最后的挣扎,尝试之前,我只是想知道如果有人在那里遇到类似的东西能够提供一些建议.
提前谢谢了!
[编辑]以下是我所看到的问题的更多信息:
对于一个"游戏",可以有多达100个左右的同步客户端连接,并且游戏需要每隔几秒向每个连接的客户端发送更新消息,因此每隔几秒这个游戏需要遍历共享的玩家列表.当玩家加入或离开时,需要相应地更新列表以反映更改.除此之外,玩家可以与游戏交互并与其他玩家聊天,并且每次从玩家接收消息时,游戏将再次需要迭代通过相同的列表并进行广播.当游戏试图在许多玩家同时离开/加入(写入操作)的同时向玩家广播消息(读取操作)时,通常会抛出异常.
有谁知道用于与AWS交互的高级SDK?亚马逊提供的SDK很好,REST/SOAP API也有很好的文档,但我经常发现我最终还是要自己编写常见的高级操作.
以S3客户端为例,它使您能够放置/获取/列出对象等,但遗憾的是它缺少执行高级操作的能力,例如创建文件夹,将文件移动到其他文件夹等.
您可以使用Cloud Berry或Amazon Web控制台等工具手动执行此类操作,但有时您需要在应用程序中构建一些自动化,例如定期将某些数据备份到带有时间戳的备份文件夹中.
干杯,
更新:抱歉,如果我把问题放得太开放,看到AWS涵盖了很多不同的东西,但特别是我正在为S3寻找一个高级库.
.net ×3
c# ×3
amazon-s3 ×1
collections ×1
concurrency ×1
ip-address ×1
probability ×1
timezone ×1