1
3
德尔福的两大多层开发团队是组件4开发人员(他们的
在您的复杂环境中,多播udp可能不会削减它,但从开销的角度来看,它是无与伦比的。 如果一个连接是开放的,它可以双向使用(这也被.net remoting和wcf使用),但是会有额外的开销。 您需要在保持连接活动(锁定资源)和创建新连接(花费时间和延迟)之间找到平衡。 ——杰罗恩 |
2
7
可以考虑“播放”一下http协议,以获得您想要的内容,同时仍然可以浏览客户端可能拥有的所有代理、nat和防火墙。 让每个客户机对消息计数执行一个普通的http请求,以禁止任何类型的缓存(例如:get http://yourserver.org/getcount/nodeid/timeofday/sequence )。在http服务器端实现中,如果“count”与以前相同(即:没有新消息),则提供答案。 我这样做是为了一个ajax风格的应用程序,它在浏览器中运行,表现得有点像聊天应用程序,但是您的解决方案可以更快。我使用tidhttp服务器实现了服务器端的东西,这允许我通过简单地在它的线程中sleep()-来延迟为客户端的东西提供答案。从客户端来看,它看起来像一个服务器,有时给出答案的速度非常慢。 服务器端内容的伪代码:
这段代码背后的想法是:它运行在您自己服务器上的一个线程中,在该线程中,它可以测试消息计数,大概花费很少:
这将是服务器上的需求,但我想说它们是可行的:
|
3
4
我想看看 kbmMW 我可能会使用类似于ms exchange的方法-通过tcp/ip连接和身份验证,然后通过udp将更新通知从服务器发送到客户端,然后客户端接收udp请求并通过tcp/ip下载更新。 (至少我是这样理解ms exchange的工作原理的) |
4
3
你可以试着给服务器打个电话,然后在服务器上等一段时间(1分钟?)直到你有更新。这样,您就不需要从服务器返回到客户端的连接,而且您几乎可以立即获得到客户端的结果(如果您在1分钟内有更新,则结束等待呼叫)。这是一个相对容易和广泛的(?)被网络应用使用(比如gmail:它有一个这样的后台连接:如果一封新邮件到达,你会立即在收件箱中看到它!).I使用类似于以下内容(Remobjects):
缺点是:您将连接保持打开的时间相对较长(如果由于wifi等原因导致连接丢失怎么办?)高服务器“负载”(每个连接都有一个线程,保持打开状态:如果有许多客户机,则可以从资源中获取资源)。 我们在这里使用Remobjects,并使用TCP+BinMessage,它的开销比SOAP+HTTP低得多,而且非常快!所以如果你能用的话,我真的可以推荐!(在您的例子中,您需要delphi的removobjects和.net的removobjects)。只有在需要连接第三方时才使用soap,只有在由于internet/firewall原因需要时才使用http。soap很好,但是有很高的开销和性能问题。 您还可以结合使用这些方法:在后台线程中使用简单的(remobjects)tcp连接(开销低),每10秒轮询一次,然后等待5秒以获取新数据。 |
5
3
我在比你的10K客户机还要大的系统上做过性能测试,当你达到所提到的每秒请求量时,你很可能会遇到每秒连接数、并发开放连接、防火墙变慢等问题(这与Torrent Tracker可能面临的问题几乎相同)。 如果客户端只需要“询问是否有新的东西”,那么最容易实现的轻量级协议是udp,下一个轻量级协议是纯tcp,这两个协议都使用indy客户端。 协议本身实际上可以简单到向服务器发送“任何自[yyyy-mm-dd hh:mm:ss]以来的新内容”,然后用一个1字节的数字(可能有256个答案)进行应答。 有了tcp,你就可以让“管道”保持几分钟的开放,并且你可以每隔x秒发送“任何新的”消息。同样,在tcp中,如果客户端定期检查管道中的数据,服务器可以在发生某些事情时将信息“推送”到管道(客户端)。 |
6
2
我会尽量在多个服务器之间分配负载。为此,我将执行以下操作:
你得小心这里的安全。首先,我建议您不要对推送通知服务器使用https。相反,您可以使用在客户端请求通知时交换的会话密钥对响应的内容进行签名。然后客户负责验证答案。不要忘记,您不仅需要签署状态,还需要签署soap服务url。 这有点复杂,但是通过分离状态和实际的消息通信量,您可以更容易地扩展解决方案。另外,在您真正想要交换数据之前,不需要进行昂贵的ssl协商。 |
7
2
我们使用remobjects sdk“events”进行此操作,但这可能不适合您,因为 答:它只适用于remobjects自己的二进制协议,而不是soap(即客户机必须包含ro代码) B:基本上是“保持线路畅通”的方法。因此,可扩展到10K客户机是一个潜在的问题。 我试着做一些测试,看看保持10K插座打开的开销到底有多大。如果你只需要一些额外的服务器内存,那将是一个廉价的解决方案。而且因为套接字是从客户端打开的,所以它不应该导致防火墙问题。防火墙所能做的最糟糕的事情就是关闭套接字,因此当这种情况发生时,您的客户端需要重新打开它。 |
8
1
只有当您的远程设备是iphone时,iphone的推送通知才有效。唯一的其他选项是保持连接打开(尽管大部分是空闲的)或从客户端进行轮询。 您可以通过简化调用来减少轮询的开销。使用一个简单的web操作将最高的消息编号返回给客户机,并让客户机执行一个简单的http get来接收这个编号。这减少了带宽的数量,并使其保持简单。如果客户机需要获取更新的数据,则可以进行完整的soap调用。 |
9
1
任何时候,只要你有一台服务器和10000多个客户端,你需要每隔几秒钟更新一次,你就会遇到问题。我会得到更多的服务器,并保持客户机连接在一个后台线程的客户机,最初连接,然后等待通知来从服务器与内置的保持活动机制。 如果您试图从服务器推送到当前未连接的客户端,那么如果您无法控制客户端环境,请祝您好运。在我看来,你是被迫进入客户端启动的连接。 |
10
0
左外野有些东西。 为什么只需要验证就可以得到一个表示更新准备就绪的标志?为什么不让一台机器在认证防火墙之外…甚至在云中…这只会处理那些“任何可用的”请求。然后,如果有什么可用的话,让客户仔细检查以获得真实的数据。此请求服务器可以从实际服务器执行7秒的getcount。 我们现在谈论的是非常少的数据和非常少的设置时间为一个简单的'旗帜'甚至没有计数。 它仍然有数千个请求,但与完全验证的请求相比,它的开销最小。 |
icra · PHP向远程电话发送通知 6 年前 |
ebillis · Laravel$用户->通知返回空值 6 年前 |
Marc Jonkers · P、 使用可变消息通知like消息 6 年前 |
Brunaine · Laravel mix无生成通知 6 年前 |
Zolo · BroadcastReceiver未从通知按钮获取数据 6 年前 |
Wooram Jung · 如何在Android O中动态更改通知声音 6 年前 |
NtFreX · 检查firefox中是否临时禁用了浏览器通知 6 年前 |
Ahmed · Android-通知通道API>=26工作不正常 6 年前 |
Nick Jones · Xamarin表单-处理通知单击 6 年前 |