我正在尝试每次用户连接时更新连接到聊天的用户数,但无法正常工作。它适用于断开但不适用于连接。
这是服务器
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);
});
答案 0 :(得分:1)
您可以使用socket.join
和socket.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")
事件的服务器端拥有事件监听器。