【问题标题】:Detecting (on the server side) when a Flex client disconnects from BlazeDS destination当 Flex 客户端与 BlazeDS 目标断开连接时检测(在服务器端)
【发布时间】:2010-02-24 14:59:05
【问题描述】:

我想知道当 Flex 客户端与 BlazeDS 目标断开连接时是否可以轻松检测(在服务器端)?我的情况很简单,我想尝试使用它来确定我的每个客户端在每个会话中连接了多长时间。我还需要能够区分客户端(即不只是计算我在 ds-console 中看到的当前连接的客户端的数量)。

虽然我可以在我的客户端中编写“我现在正在注销”过程,但我不知道如果客户端只是导航到另一个网页而不是通过上述注销过程,这是否会触发。

任何人都可以建议是否有一种简单的方法可以在服务器端进行这种类型的监控。

非常感谢, 亚历克斯

【问题讨论】:

    标签: apache-flex monitoring blazeds


    【解决方案1】:

    实现您自己的扩展“扩展 ServiceAdapter”的适配器

    然后设置函数:

    @覆盖 公共布尔句柄订阅(){ 返回真; } 这样你就可以处理订阅和取消订阅了

    然后你就可以在管理功能中管理这些了:

    @覆盖 公共对象管理(CommandMessage commandMessage){

    switch (commandMessage.getOperation()) { 案例 CommandMessage.SUBSCRIBE_OPERATION: 休息; 案例 CommandMessage.UNSUBSCRIBE_OPERATION: 休息; }

    }

    您还可以捕获不同的命令。

    希望有帮助

    【讨论】:

      【解决方案2】:

      唯一正确的方法是以某种方式实现心跳机制。您可以使用 http 的 keep-alive 和 session expire ,如前所述,但我的意见是使用 BlazeDS 的消息传递机制(在 X 秒发送消息)。您可以控制时间间隔和其他方面(也许您想检测客户端是否在几个小时内没有做任何事情,并且即使您的客户端仍然连接也使会话无效)。

      如果您想在客户端断开连接时立即收到通知(聊天应用程序),解决方案是拥有一个套接字 (RTMP) 或某种仿真(http 流),它会立即检测客户端是否断开连接,但是这种断开连接可以是暂时的(可能网络中断了一秒钟,然后就可以了,你也应该检测到)。

      【讨论】:

      • 感谢 Herms 和 Cornel。某种心跳是我认为我可能必须做的(我认为为连接的客户端提供一个“心跳”目的地应该很容易)。我只是在想可能为此在 BlazeDS 中内置了一些东西(虽然我还没有找到它)。我会计划心跳。再次感谢
      【解决方案3】:

      我假设 BlazeDS 会在客户端断开连接时提供回调或事件,但我没有使用 Blaze,所以这只是一个猜测。第一步是检查文档以查看是否确实如此,因为那将是您最好的选择。

      在没有断开连接事件(或它不可靠)的情况下,我所做的是添加一个保持活动消息。例如,客户端将被配置为每 30 秒发送一次 keepalive 消息,如果服务器超过 2 分钟没有看到 keepalive,则它假定客户端已断开连接。这可以让您区分不同的客户,并且您可以调整费率和检查时间以获得您满意的结果。

      【讨论】:

        猜你喜欢
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        相关资源
        最近更新 更多