我正在为一个游戏引擎开发一个C#Server应用程序,我正在用ActionScript 3编写.我正在使用权威服务器模型来防止作弊并确保公平游戏.到目前为止,一切运作良好:
当客户端开始移动时,它会告诉服务器并在本地开始渲染; 然后,服务器告诉其他人客户端X已经开始移动,其中包含详细信息,以便他们也可以开始渲染.当客户端停止移动时,它会告诉服务器,该服务器根据客户端开始移动的时间执行计算,并且客户端呈现滴答延迟并回复所有人,因此他们可以使用正确的值进行更新.
问题是,当我在服务器计算中使用默认的20ms滴答延迟时,当客户端移动相当长的距离时,当它停止时会有明显的向前倾斜.如果我将延迟略微增加到22ms,在我的本地网络上一切都运行得非常顺利,但在其他地方,倾斜仍然存在.经过一番实验后,我注意到所需的额外延迟几乎与客户端和服务器之间的延迟有关.我甚至把它煮成了一个非常好的公式:延迟= 20 +(延迟/ 10).
那么,我将如何继续获取某个客户端和服务器之间的延迟(我正在使用异步套接字).CPU的工作量不能太大,因为没有服务器运行缓慢.此外,这真的是最好的方式,还是有更有效/更简单的方法来做到这一点?
我是一名Java编码员,对网络的工作方式不太熟悉(除了基本的UDP/TCP连接)
假设我在美国,亚洲,拉丁美洲和欧洲的机器上运行服务器.当用户请求服务时,我希望他们的请求转到最靠近他们的服务器.
我是否可以拥有一个地址:mycompany.com,并以某种方式将请求路由到相应的服务器?显然,当有人去cnn.com时,他们会从靠近他们的服务器上收到图片,视频等.坦率地说,我看不出它是如何运作的.
顺便说一句,我的服务器不提供网页服务,它们提供其他服务,例如股票市场数据......以防万一.
由于我是程序员,我很想知道如何在软件中做到这一点.由于这只是闲置的好奇心,指向商业产品或服务的指针对理解这个问题不是很有帮助:)
我在寻找可以帮助估计x86 CPU上的中断等待时间的信息。在“ datasheets.chipdb.org/Intel/x86/386/technote/2153.pdf”中找到了非常有用的论文。但是本文为我提出了一个非常重要的问题:如何定义等待当前指令完成所提供的延迟?我的意思是在识别INTR信号与执行INTR微代码之间存在延迟。我记得,英特尔软件开发人员手册还讲述了有关等待当前执行指令完成的信息。但这也说明某些指令可能会被中断。主要问题是:如何为特定处理器定义最大完成指令等待时间。需要估算核心滴答和内存访问操作,不以秒或微秒为单位。缓存和TLD未命中,以及可能影响等待的其他此类内容应予以考虑。
需要进行此估算,以研究实现较小的关键部分的可能性,这些部分不会影响中断等待时间。为达到此目的,关键部分的长度必须小于或等于CPU最长的不间断指令的长度。
任何帮助都非常欢迎。如果您知道一些对您有所帮助的论文,请分享其链接。
问题:
您可能已经听说过,Android不提供低延迟音频API.低延迟音频的意思是你应该能够从麦克风获取音频信号并播放声音而中间没有太大的时间间隔(例如,5-7毫秒)
我尝试过旧的java(带有AudioRecord和AudioTrack)和"新的"OpenSL ES.它们非常糟糕,使应用程序无法使用.这个问题在这里有很好的记录.BTW,iOS API可以产生大约5-7毫秒的延迟.
寻找解决方法:
但无论如何,我正试图做低延迟音频.像这个答案描述的东西.
"但是,我只能通过编写我自己的内部混音代码并且只能播放最终的混合输出来访问低级音频播放API才能令人满意地实现这一目标.在.Net中播放声音的高级方式Compact Framework在理论上具有复音功能,但在实践中它们的工作非常糟糕(很多毛刺,口吃和失真)."
这对Android有意义吗?答案令人沮丧.
所以我的问题.Android真的没有办法实现10毫秒的音频延迟吗?
说实话,我不希望很快就会有解决方案,但只是希望一个伟大的思想能够解决这个问题.
这个问题与使用cuda流来运行许多内核有关
在CUDA中,有许多同步命令cudaStreamSynchronize,CudaDeviceSynchronize,cudaThreadSynchronize以及cudaStreamQuery来检查流是否为空.
我注意到在使用分析器时,这些同步命令会给程序带来很大的延迟.我想知道是否有人知道减少这种延迟的任何方法,当然除了使用尽可能少的同步命令.
还有任何数字来判断最有效的同步方法.考虑在应用程序中使用的3个流,如果我使用2个cudaStreamSyncs或者只使用一个cudaDeviceSync,那么其中两个需要完成才能启动第四个流,这将导致更少的损失?
我正试图从主机获得延迟很长时间而且我陷入困境.已经尝试过Simple Ping ,但似乎它没有返回延迟.我最接近的是当我使用TKC-PingTest进行MAC OS时.这是完美的,但仅限于iPhone模拟器,因为当使用iPhone时,我得到一个错误,因为TKC使用了补丁"/ sbin/ping".除了这两个,我已经尝试过很多其他的东西,什么都没有.
我正在尝试使用来自WebRTC的api的getStat()来查看它是否提供任何有用的信息度量延迟和其他视频流数据.问题是没有太多关于如何使用它的信息.即使是较旧的现有示例也非常罕见,但自那时起api发生了变化.
例如,我的设置:
peerconnection.getStats(function(stats) {
console.log(stats); } ));
Run Code Online (Sandbox Code Playgroud)
这将返回具有2个函数的RTCStatsResponse对象
RTCStatsResponse {result: function, namedItem: function}
Run Code Online (Sandbox Code Playgroud)
尝试调用result()函数返回第一个对象的类型为"googLibjingleSession"的RTCStatsReport对象数组,并为第二个对象键入"googTrack".尝试调用时,其他nameItem函数未定义
[RTCStatsReport, RTCStatsReport]
Run Code Online (Sandbox Code Playgroud)
从可用的小信息(https://groups.google.com/forum/#!topic/discuss-webrtc/fpr4yn4-3sg),我将获得更多RTCStatObjects,其中包含比我目前更有用的信息.
有没有人有使用webrtc的getStats的经验?我相信我可能没有正确地做到这一点
问题
我有一个系统(使用C++ 11)与不规则事件的生产者:( P例如,它可能是UI事件,或者它可能通过TCP/IP套接字接收金融交易数据等).每个事件都附带一个小数据包.
然后,我有一个数字"工蜂"的:B1,B2,B3,...每一种确实的事件的自己加工P饲料他们.他们的处理可能很快,但可能需要很长时间,这就是为什么计划是在自己的线程中运行每个工蜂.此外,每个工蜂需要每N秒运行一次不同的功能(例如N = 60,但它也可能因工蜂而异).此常规处理应始终与事件处理串行完成,永远不要在不同的线程上完成.
最后,一些工蜂也可能会从其他生产活动(P2,P3等),但如果复杂的事情,我总是可以有P1,P2等喂到中央P,他们的工作是将所有事件发送到工蜂.
问题
这种系统的最佳设计是什么?低延迟和高效率是最佳的主要标准.可靠性也很重要:每个B事件都必须接收每个事件(即使它们是批量生成的,因为它当时很忙),如果一个B事件崩溃,它不应该影响其他事件.
如果重要:假设1-64个工蜂,4-8个硬件线程,事件之间的平均时间为10秒,事件之间的最短时间为0.2秒,典型的常规功能是每秒N=60.但如果理想的设计对任何这些标准都敏感,我想了解如何.
注意:如果工蜂可以保证永远不会抛出异常,那是否会改变最佳设计的选择?(感觉这将是无关的,但我想我会把它提起来.)
注意:蜜蜂可能比硬件线程更多; 假设这是另一个问题.(例如,延迟可能对某些工蜂很重要,并且可能会给他们自己的线程,而其他人可能会被告知共享一个线程.)
想法一:等到事件或超时
每个P都有互斥和条件.当它获得新数据时,它会发出信号.
每个工蜂使用theCondition.wait_until(lock,timeout)这里timeout是下一个需要醒来做定期处理的时间.它检查返回值以查看它是否已发出信号或超时.
这里的缺点似乎是它只是一个信号,没有数据.所以我需要每个B人获得另一个锁,以便对数据队列进行读访问.通常他们都希望同时做到这一点,所以这变得很难看.
我也不清楚如果B需要花费很长时间处理某些事情并在它wait_until再次调用之前错过了几个事件会发生什么.
想法二:每个工人的数据队列
这里每个B都有一个带锁的队列.P获取写锁定,并添加数据项.B获得一个读锁定,以便在准备好时关闭每个项目.B因为有新数据,我仍然需要一些知道醒来的方法.
这里的缺点似乎是P线程需要循环遍历每个B以给它们数据.这会引入延迟,并且也会感到脆弱(例如,如果其中一个工蜂表现不佳).
想法三:期货
这个问题感觉非常适合未来. P创建一个std::promise,然后每个B …
我在 IIS 上有一个 ASP.NET Web 应用程序,它将大量数据缓存到内置 ASP.NET 缓存中。我想将缓存移至 Redis 并使用 AWS ElastiCache Redis,因为当前我的所有服务器都不共享其缓存。它们已经托管在 EC2 上。我需要了解,通过将缓存从基本相同的服务器(我托管应用程序)移动到 AWS ElastiCache 的某个网络实例,是否不会降低性能?我读到 AWS Redis 本身有一个“亚毫秒延迟”,但是我不明白,是否也提到了网络延迟,或者必须满足什么条件才能获得这种延迟。
这是我的情况:
所以这里有一个问题:
先感谢您。
latency distributed-caching amazon-web-services redis amazon-elasticache
我的客户端正在使用org.apache.hbase:hbase-client:2.1.0"并且服务器正在运行 1.2.0-cdh5.11.1(1.2.0-cdh5.11.0在替代测试集群中)。
我的客户端非常简单,它Connection在启动时实例化了一个类(由于Apache的建议,该类很繁重且线程安全,因此在线程之间共享)。然后,对于每个请求,它创建一个Table类并执行一个.exists(new Get(rowKey))操作。
像这样:
Connection conn = ConnectionFactory.createConnection(hbaseConfig);
Run Code Online (Sandbox Code Playgroud)
和
final Table table = conn.getTable(tableName);
return table.exists(new Get(context.getKey()));
Run Code Online (Sandbox Code Playgroud)
大多数情况下,最糟糕的情况是,到HBase的请求延迟时间为40ms。通常,它会在10毫秒左右完成。
但是,我们注意到偶尔的请求大约需要5000毫秒(5秒)的时间-但仍能成功完成!
偶尔,我的意思是每分钟大约1个请求(每分钟总共600个请求,所以速率很小)。但这很稳定。
这些几乎恰好在5s(+/- 100-200ms)左右。那是奇怪的部分。这不是一个峰值。
起初,我怀疑这是客户端的错误配置,我需要设置更严格的超时,因此我设置了以下内容:
hbaseConfig.set(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 1);
hbaseConfig.set(HConstants.HBASE_CLIENT_PAUSE, "50");
hbaseConfig.set(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT, "2000");
hbaseConfig.set(HConstants.HBASE_RPC_TIMEOUT_KEY, "1500");
hbaseConfig.set(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY, "2000");
hbaseConfig.set(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, "1500");
hbaseConfig.set(HConstants.ZOOKEEPER_RECOVERABLE_WAITTIME, "2000");
hbaseConfig.set(HConstants.ZK_SESSION_TIMEOUT, "2000");
hbaseConfig.set("zookeeper.recovery.retry", "1");
hbaseConfig.set("zookeeper.recovery.retry.intervalmill","200");
hbaseConfig.set("hbase.ipc.client.socket.timeout.connect", "2000");
hbaseConfig.set("hbase.ipc.client.socket.timeout.read", "2000");
hbaseConfig.set("hbase.ipc.client.socket.timeout.write", "2000");
Run Code Online (Sandbox Code Playgroud)
换句话说,5000ms超过了全局超时时间(如中所述HConstants.HBASE_CLIENT_OPERATION_TIMEOUT)。
但是我有大约5秒钟才能完成的请求-并且成功完成了。
除了这些超时之外,我从使用更改AsyncConnection为Connection(无论如何都不需要使其异步),并且正在考虑仅GET拨打电话而不是exists。
但是在这一点上,我很沮丧。我没有看到任何财产以及5s的来源。甚至没有超时,它实际上成功了!
有人遇到过吗?有什么方法可以让hbase-client发出指标吗?服务器端指标显示延迟没有增加(扫描指标)。
latency ×10
.net ×1
android ×1
audio ×1
bandwidth ×1
benchmarking ×1
c# ×1
c++11 ×1
concurrency ×1
cuda ×1
cuda-streams ×1
events ×1
future ×1
hbase ×1
hbase-client ×1
interrupt ×1
ios ×1
java ×1
networking ×1
objective-c ×1
performance ×1
ping ×1
real-time ×1
redis ×1
sockets ×1
statistics ×1
synchronize ×1
tcp ×1
webrtc ×1
x86 ×1