我想知道当Flex客户端与BlazeDS目的地断开连接时,是否可以轻松检测(在服务器端)?我的场景很简单,我想尝试使用它来计算每个会话连接每个客户端的时间。我还需要能够区分客户端(即不仅仅计算我在ds-console中看到的当前连接客户端的数量)。
虽然我可以在我的客户端编写“我现在正在退出”的过程,但我不知道如果客户端只是导航到另一个网页而不是通过所述注销过程,这是否会触发。
有人可以建议,如果有一种简单的方法可以在服务器端进行这种类型的监控。
非常感谢, 亚历
答案 0 :(得分:1)
实现您自己的适配器扩展“extends ServiceAdapter”
然后设置功能:
@覆盖 public boolean handlesSubscriptions(){ 返回true; } 所以你可以处理订阅和取消订阅
然后您可以在管理功能中管理这些:
@覆盖 public Object manage(CommandMessage commandMessage){
switch(commandMessage.getOperation()){ case CommandMessage.SUBSCRIBE_OPERATION: 打破; case CommandMessage.UNSUBSCRIBE_OPERATION: 打破; }
}
您还可以捕获不同的命令。
希望这个帮助
答案 1 :(得分:0)
我认为BlazeDS会在客户端断开连接时提供回调或事件,但我没有使用Blaze,所以这只是猜测。第一步是检查文档是否确实如此,因为这是你最好的选择。
在没有断开事件(或不可靠)的情况下,我所做的是添加keepalive消息。例如,客户端将被配置为每30秒发送一次keepalive消息,如果服务器超过(例如)2分钟而没有看到keepalive,则它假定客户端已断开连接。这可以让您区分不同的客户,并且您可以利用费率和检查时间来获得您满意的内容。
答案 2 :(得分:0)
正确行事的唯一方法是以某种方式实现心跳机制。您可以使用http中的keep-alive和会话过期,如前所述,但我的意见是使用BlazeDS的消息传递机制(在X秒发送消息)。您可以控制时间间隔和其他方面(可能您想检测客户端是否在几个小时内没有执行任何操作,并且即使您的客户端仍然连接也会使会话无效)。
如果您希望在客户端断开解决方案时立即得到通知(聊天应用程序),请使用套接字(RTMP)或某些仿真(http流),它将立即检测客户端是否断开连接,但是此断开连接可以是暂时的(也许是网络停了一秒钟,之后就好了,你也应该检测到它。)