Jac*_*ack 1 javascript jquery node.js express socket.io
我正在尝试创建一个基本的Node应用程序,每次客户端连接时我想更新页面上显示的计数器.(我的目标是以最简单,可学习的形式创建此应用程序,以向我的讲师演示节点).
建立联系
var clients = 0;
io.sockets.on('connection', function (socket) {
socket.on('connect', function () { clients += 1 });
socket.on('disconnect', function(){ clients -= 1 });
});
Run Code Online (Sandbox Code Playgroud)
渲染页面
app.get(navigation.chat.page, function(req, res){
res.render('chat', {
title: navigation.chat.title,
connected: clients
});
});
Run Code Online (Sandbox Code Playgroud)
span#client_count #{connected}
| connected clients
Run Code Online (Sandbox Code Playgroud)
var socket = io.connect('http://localhost');
$(document).ready(function(){
socket.on('connect', socket.emit('connect'));
});
Run Code Online (Sandbox Code Playgroud)
问题: 连接的客户端数量仅在页面刷新时更新.我希望数字异步更新.我对node,socket.io和express表示新手,所以我不确定如何解决这个问题!
而不是在客户端增加,更好地保持服务器端的计数器值,连接增加和断开 io事件的减少.然后,您可以发送更新的计数器(在更改值的相同事件处理程序中).在客户端,使用计数器监听事件,并在收到时,替换html中的值.
服务器:
var users_count = 0;
io.sockets.on('connection', function (socket) {
//on connection, update users count
++users_count;
//send it to every opened socket
io.sockets.emit('users_count', users_count);
//when this socket is closed
socket.on('disconnect', function () {
//user disconnected
--users_count;
//emit to every opened socket, so everyone has up to date data
io.sockets.emit('users_count', users_count);
});
});
Run Code Online (Sandbox Code Playgroud)
客户:
jQuery(function($){
//connect to localhost
var socket = io.connect('http://localhost');
//handle users_count event, by updating our html
socket.on('users_count', function(data){
$('#client_count').text(data);
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1888 次 |
最近记录: |