当用户连接到聊天

时间:2017-03-18 10:14:45

标签: javascript node.js sockets

我正在尝试每次用户连接时更新连接到聊天的用户数,但无法正常工作。它适用于断开但不适用于连接。
这是服务器

var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );

var app = express();
var server = http.createServer( app );

var io = socket.listen( server );
server.listen( 8080 );

connections = [];

io.sockets.on( 'connection', function( client ) {
	connections.push(client);
	console.log( "---CONNECT--- INFO --> New user connected! >>>>> USERS ONLINE: %s", connections.length);

	client.on('connection', function(data){
		io.sockets.emit('connect', {users:connections.length});
	});

	client.on('disconnect', function(data){
		connections.splice(connections.indexOf(client),1);
		console.log("---DISCONNECT--- INFO --> User disconnected >>>>> USERS LEFT: %s", connections.length);

		io.sockets.emit('disconnect', {users:connections.length});
	});

	client.on( 'message', function( data ) {
		console.log( 'Message received from: ' + data.id);

		io.sockets.emit( 'message', {id:data.id, name: data.name, avatar: data.avatar, message: data.message } );
	});
});

如果我这样做,断开连接停止工作,服务器停止正常工作。如果我在 client.on 之外发射,这将在 io.sockets.on('connection')内部,服务器将崩溃。
在客户端我有这个:

var socket = io.connect( 'http://localhost:8080' );
socket.emit('connection');

socket.on('connect', function(data){
    $("#usersOnline").html(data.users);
});
socket.on('disconnect', function(data){
    $("#usersOnline").html(data.users);
});

2 个答案:

答案 0 :(得分:1)

您可以使用socket.joinsocket.leave

io.sockets.on( 'connection', function( client ) {
    connections.push(client);

    client.join('room', function(data){
        //
    });

    client.leave('room', function(data){
        // 
    });
});

答案 1 :(得分:0)

好吧,因为我的其他答案都没有用于某种奇怪的原因, 尝试在连接时从客户端发出事件。

所以在客户端:

var socket = io.connect( 'http://localhost:8080' );

socket.emit("connection");

socket.on('connect', function(data){
    $("#usersOnline").html(data.users);
});
socket.on('disconnect', function(data){
    $("#usersOnline").html(data.users);
});

这应该有效,因为您已经在client.on("connection")事件的服务器端拥有事件监听器。