对此的完整解决方案可能相当复杂,它还取决于运行时 - 我将假设Web Web客户端.
最终你需要一种做两件事的方法:
为了实现这一点,您可能只想要超时,并且只有在超时触发时才发送事件以指示用户处于空闲状态:
var timeout = null;
function sendUserIdle() {
// see part 2
}
function resetIdleTracking() {
if( timeout !== null ) {
// reset
clearTimeout( timeout );
}
timeout = setTimeout( sendUserIdle, 3*60*1000 ); // 3 minutes
}
window.addEventListener( 'mousemove', resetIdleTracking );
Run Code Online (Sandbox Code Playgroud)
Pusher在线信道的缺失功能IMO是更新在线信息的能力.所以,你需要另一种方法来实现这一目标.我认为你有两个解决方案:
请参阅:访问渠道成员.
function sendUserIdle() {
var channel = pusher.channel( 'presence-<your-channel>' );
// client events have to have a 'client-' prefix
channel.trigger( 'client-user-idle', channel.members.me );
}
Run Code Online (Sandbox Code Playgroud)
function sendUserIdle() {
makeAjaxRequest( '/idle-notification-endpoint', channel.members.me );
}
Run Code Online (Sandbox Code Playgroud)
注意:您可以channel.members.me使用序列化JSON.stringify( channel.members.me )
在服务器上(伪代码):
userInfo = getUserInfoFromRequest();
pusher.trigger( 'presence-<your-channel>', 'user-idle', userInfo );
Run Code Online (Sandbox Code Playgroud)
收到事件后,您将相应地更新用户UI列表(将该用户标记为空闲).
channel.bind( 'user-idle', function( user ) {
var uniqueUserId = user.id;
// update UI
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |