精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-25
最后修改:2010-12-26
配置文件中配置 Channel 的代码片段: <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/> <properties> <polling-enabled>true</polling-enabled> <polling-interval-seconds>0</polling-interval-seconds> <wait-interval-millis>60000</wait-interval-millis> <max-waiting-poll-requests>100</max-waiting-poll-requests> <client-wait-interval-millis> <piggybacking-enabled> <login-after-disconnect> <flex-client-outbound-queque-processor> <serialization> <connect-timeout-seconds> <invalidate-session-on-disconnect> <add-no-cache-headers> </properties> </channel-definition> <properties> 中各项的具体含义:
关于一般轮询: 使用一般轮询需要在配置文件中设置 [polling-enable] 和 [polling-interval-seconds] 选项,或者无视配置文件直接在 Flex 中对 Channel 设置 pollingEnabled 和 pollingInterval 属性。一般轮询模式下,服务器对客户端的请求立即作出反应:如果消息队列中存在请求的消息则返回该消息否则返回一个空结果。
关于长轮询: 使用长轮询需要在一般轮询的配置基础上增加 [wait-interval-millis] ,[max-waiting-poll-requests] 和 [client-wait-interval-millis],其中最关键的是 [wait-interval-millis] 。在长轮询模式下,如果消息队列里不存在客户端要求的消息,那么服务器对于客户端的轮询并不立即作出响应,而是将该请求的响应挂起,进入等待状态。一旦该轮询请求的消息进入消息队列则处于等待状态的响应线程立即激活并传递消息给客户端。响应线程在等待状态下等待的最长时间由 [wait-interval-millis] 指定,endpoint 中可以同时存在多少个处于等待状态的响应线程由 [max-waiting-poll-requests] 指定,这个数量的设置需要充分考虑服务器对于的HTTP请求的最大负载。
BlazeDS的三种推模式:实时连接--能最敏捷的反映数据的变化,但客户端需要独占宝贵的连接资源,对服务器环境的要求最高;一般轮询--只能在特定周期上获取数据变化,请求完成后立即释放连接,比较节省服务器资源;长轮询--是前两者的折中方案,即不会长期占用连接,也能在一定程度上快速反映数据变化。选择哪种推模式需要在实际项目中根据具体需求做出选择。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2965 次