- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
BlazeDS 是作为 servlet 实现的,因此仅限于大约数百个同时用户。
我想知道支持 Servlet 3 的最新 Web 容器(Tomcat 7、GlassFish/Grizzly、Jetty 等)是否可以用于创建 NIO 端点,以将并发用户数量增加到数千?
这是一个有效且实用的解决方案吗?有人在生产中这样做过吗?
类似于此的成熟版本:http://flex.sys-con.com/node/720304如果这在当时非常重要,那么为什么现在(当 Servlet 3 广泛可用时)没有人尝试实现 NIO 端点呢? (注意,我是这里的新手,所以如果我遗漏了什么,请随时指出明显的内容)
蔚来受益:http://www.javalobby.org/java/forums/t92965.html
如果不是,负载均衡器和多个应用程序服务器(每个服务器都有一个 BlazeDS 实例)是否是推荐的解决方案(除了使用 LCDS 等)?
最佳答案
据我所知,GraniteDS 是唯一实现实时消息传递异步 servlet 的解决方案,即。数据推送。此功能不仅适用于 Servlet 3 容器(Tomcat 7、JBoss 7、Jetty 8、GlassFish 3 等),还适用于较旧的容器或具有特定异步支持的其他容器(例如 Tomcat 6/CometProcessor、WebLogic 9+/AbstractAsyncServlet)等)
其他解决方案没有此功能 (BlazeDS) 或使用 RTMP(LCDS、WebORB 和 Clear Toolkit 的最新版本)。关于 RTMP 实现我不能说太多,但 BlazeDS 显然缺少可扩展的实时消息传递实现,因为它仅使用同步 servlet 模型。
如果您需要处理数千个并发用户,您甚至可以创建 GraniteDS 服务器集群,以进一步提高可扩展性和稳健性(例如,请参阅 this video)。
异步 servlet 与传统 servlet 的可扩展性已经进行了多次基准测试,并给出了令人印象深刻的结果。例如,参见this post在 Jetty 博客上:
With a non NIO or non Continuation based server, this would require around 11,000 threads to handle 10,000 simultaneous users. Jetty handles this number of connections with only 250 threads.
经典同步模型:
- 10,000 个并发用户 -> 11,000 个服务器线程。
- 1.1 比率。
Comet异步模型:
- 10,000 个并发用户 -> 250 个服务器线程。
- 0.025 比率。
从其他异步实现(不是 Jetty)中可以大致预期这种比率,并且使用 Flex/AMF3 而不是纯文本 HTTP 请求不会改变太多结果。
为什么使用异步 Servlet?
当立即处理每个请求时,经典(同步)servlet 模型是可以接受的:
request -> immediate processing -> response
数据推送的问题在于,HTTP 协议(protocol)不存在真正的“数据推送”:服务器无法向客户端发起调用来发送数据,它必须应答请求。这就是 Comet 实现依赖于不同模型的原因:
request -> wait for available data -> response
通过同步 servlet 处理,每个请求都由一个专用服务器线程处理。然而,在数据推送处理的上下文中,该线程大部分时间只是等待可用数据,什么也不做,同时消耗大量服务器资源。
异步处理的全部目的是让 servlet 容器使用这些(通常)空闲线程来处理其他传入请求,这就是为什么当您的应用程序需要实时消息传递功能时,您可以期待可伸缩性方面的显着改进.
您可以在网络上找到许多其他资源来解释此机制,只需 google 一下 Comet 即可。
关于blazeds - 具有 Servlet 3 的较新 Web 容器可以扩展 BlazeDS 最大并发用户数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121316/
我正在尝试在多线程环境中实现某种累积逻辑;我想知道没有 lock 和 synchronized 关键字是否有更好/更快的方法来做到这一点?以下是我当前的代码: public class Concurr
我需要帮助构建一个实现信号量的监视器,简单的 C 示例就可以。 这是为了证明可以在任何可以使用信号量的地方使用监视器。 最佳答案 如果您说允许使用互斥锁/condvars,请检查: #include
我已经构建了一些返回部分产品目录的 ajax,并且我正在尝试将 xml 输出到文档中,到目前为止,这是我所拥有的: $("#catalog").append("Item NamePriceDe
很抱歉,如果我的问题之前已经被问过,或者它太明显了,但我真的需要澄清这一点。感谢您的帮助。 在多用户界面中,如果来自不同用户的相同事务同时到达服务器,会发生什么? 我有下一张表: create tab
这可能是一个愚蠢的问题,但是这个程序的输出(它的方式)可以为零吗? public class Test2{ int a = 0; AtomicInteger b = new Atomi
假设我本地主机上的一个网站处理每个请求大约需要 3 秒。这很好,正如预期的那样(因为它在幕后进行了一些奇特的网络)。 但是,如果我在选项卡(在 firefox 中)中打开相同的 url,然后同时重新加
我对 MongoDB 的读锁定有点困惑。单个集合可以支持多少个并发读取操作? 最佳答案 如 tk 给出的链接中所写:http://www.mongodb.org/pages/viewpage.acti
如果有四个并发的 CUDA 应用程序在一个 GPU 中竞争资源会发生什么这样他们就可以将工作卸载到图形卡上了? Cuda Programming Guide 3.1 提到那里 某些方法是异步的: 内核
👊上次的百度面试遇到了关于spark的并发数的问题,今天我们就来将这些问题都一并解决一下,图画的的有点丑,还行大家见谅,百度实习的问题我放在了下面的链接👇: 链接: 2022百度大数据开发工程师实
我对 Groovy 线程有疑问。 我的任务是以某种方式翻译给定目录中的每个文件 并将生成的输出放在其他目录中的文件中。 我编写了以下代码,该代码有效: static def translateDir(
Java中的同步和锁定有什么区别? 最佳答案 synchronized是语言关键字;锁是对象。 当一个方法或代码块被标记为同步时,您是说该方法或代码块必须先获得某个锁对象(可以在同步的语法中指定)才能
我需要创建一个能够同时处理来自客户端的多个请求的并发 RPC 服务器。 使用 rpcgen linux编译器(基于sun RPC),不支持-A为并发服务器创建 stub 的选项。 (-A 选项在 so
System.out.println("Enter the number of what you would like to do"); System.out.println("1 = Manuall
我正在将我的应用程序移植到 iOS 8.0 并注意到 UIAlertView 已被弃用。 所以我改变了使用 UIAlertController 的方法。这在大多数情况下都有效。 除了,当我的应用程序打
我正在逐行同时读取两个文本文件。 我特别想做的是当lineCount在每个线程上都是相同的我想看看扫描仪当前正在读取的字符串。 我环顾四周寻找可以实现的某些模式,例如 Compare and Swap
我正在阅读 Java Concurrency in Practice .在章节中断政策部分 取消和关闭 它提到 A task should not assume anything about the
我正在尝试学习线程,互斥等的基础知识。遵循here的文档和示例。在下面的代码中,我得到预期的输出。问题: 想确认我是否有任何陷阱?我们如何改善下面的代码? 我的线程在哪一行尝试获取互斥锁或正在等待互斥
并发是指两个任务在不同的线程上并行运行。但是,异步方法并行运行,但在同一个线程上。这是如何实现的?另外,并行性怎么样? 这三个概念有什么区别? 最佳答案 并发和并行实际上与您正确推测的原理相同,两者都
以此ConcurrentDouble类定义为例: public class ConcurrentDouble { public double num = 0; public void subt
在得知并发确实增加了许多人的吞吐量后,我一直计划在项目中使用并发。现在我在多线程或并发方面还没有做太多工作,因此决定在实际项目中使用它之前学习并进行简单的概念验证。 以下是我尝试过的两个示例: 1.
我是一名优秀的程序员,十分优秀!