2011-07-25 14 views
1

嗨,我的目标是赶上会话失效,并发送消息到FlexClient订阅的客户端的所有目标....已断开连接。blazeds如何理解会话是否超时

我实现了一个侦听sessionCretaed,sessionDestroyed,clientCreated,clientDestroyed,messageClientCreated,messageClientDestroyed的服务。

问题是我想赶上messageClientDestroyed并发送到该目的地的消息,该用户已断开连接。但blazeds销毁messageClient当您添加一个subtopic.So如何理解,如果会话失效和所有messageClient被销毁或者用户只需进入另一个地方并为他的消费者添加一个子主题。

我也打开其他解决方案来实现该机制。当用户断开会话超时或关闭网站浏览器等我想赶上它并发送消息到订阅的目的地。

谢谢。

回答

1

我不是这个主题的主人,但我相信你必须在d/c之后调入Flex会话生命周期事件FlexSessionListener。

如果您的客户端因为他们想要离开,在弹性端调用ChanelSet上的disconnectAll(),这样Blaze DS将显式清理资源。

如果您的客户端,因为超时的离开,你可以配置通道定义使用无效会话上断开=真

这两个应该触发FlexSessionListner.sessionDestroyed()。此方法的参数是一个FlexSession对象,您可以在其中推断您需要的内容。

+0

首先感谢您的回答。起初我已经实施了一项服务,就像你说的一样,但是因为我的目标是发送消息给订阅的频道,我需要获得订阅的目的地。但blazeds首先破坏messageClients然后FlexClients并最终破坏会话。所以当我尝试在sessionDestroyed中获得FlexClient或messageClients时,我什么都没有。现在我正在捕获messageClientDestroyed事件来发送消息,但它不仅在会话被销毁时调用,而且在客户端添加子主题时也会调用它,所以如果会话将要销毁或添加了停止,则需要获取该子主题。 – maniacneron

+0

这太奇怪了,传入sessionDestoryed的FlexSession对象应该给正在离开的客户端。如果您可以访问MessageService实例,则可以调用pushMessageToClients().... http://livedocs.adobe.com/blazeds/1/javadoc/flex/messaging/services/MessageService.html –