我有使用csharp编写的应用程序服务器。服务器正在与使用FLEX 4(Flash Builder 4.5)构建的Flash客户端进行通信。
服务器和客户端之间的通信使用RTMP完成。
对于服务器端的RTMP功能,我使用了FluorineFX(在IIS7中托管)。
所有连接都是使用远程过程调用完成的,其中Flash客户端在服务器中执行远程过程并在RPC响应回调函数中获取结果。
服务器也可以使用RPC向客户端发送消息。
我的问题是服务器在最后一个客户端连接后6分钟左右连接所有客户端,我无法弄清楚它为什么这样做。
services-config.xml看起来像:
<services-config>
<channels>
<channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel">
<endpoint uri="rtmp://{server.name}:1935" class="flex.messaging.endpoints.RTMPEndpoint"/>
</channel-definition>
</channels>
</services-config>
web.config包含以下配置:
<fluorinefx>
<settings>
<rtmpServer>
<threadpool minWorkerThreads="0" maxWorkerThreads="25" idleTimeout="60000"/>
<rtmpConnection pingInterval="0" maxInactivity="60000" maxHandshakeTimeout="0"/>
<rtmptConnection pingInterval="5000" maxInactivity="60000" maxHandshakeTimeout="5000"/>
<rtmpTransport receiveBufferSize="4096" sendBufferSize="4096" tcpNoDelay="true"/>
</rtmpServer>
</settings>
任何有助于解决问题的帮助都将受到赞赏
Koby
答案 0 :(得分:1)
问题解决了。
这是由于IIS7应用程序池配置引起的:在其中一个应用程序服务器上,应用程序池空闲超时设置为6分钟。所以在6分钟后没有任何对应用程序的http请求,应用程序池卸载了包括Fluorine Gateway在内的所有程序集。
卸载Gateway的程序集时,它会停止终止所有连接的网关。
更改应用程序池空闲超时的方法如下:
在IIS 6中:转到“应用程序池”部分,然后右键单击&gt;承载有问题的ASP.NET应用程序的池上的属性。转到“性能”选项卡,取消选中“空闲后关闭工作进程:”
在IIS 7中,转到“连接”窗格并找到“应用程序池”,然后为承载应用程序的池选择“高级设置”。找到“空闲超时”属性并将其设置为“0”(这将禁用超时)。
Koby