我正在用socket.io做我的第一个应用程序,我想发送一个信息给任何用户。我知道广播功能,但我想给任何人发个信息。我已经找到了一种方法:使用io.sockets.emit,但我不知道该在哪里编写代码,因为我在node.js上使用express,并且在函数中接收到一个套接字(当前用户)。
谢谢。
发布于 2014-04-21 16:42:16
这是一个聊天的例子。全码为chatting
希望它对美国有所帮助,因为它需要空间。所以如果你想向所有的用户发送信息。将io.sockets.in(房间).emit更改为io.sockets.emit
var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');
var app = express();
app.use(express.bodyParser());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
var httpServer =http.createServer(app).listen(3000, function(req,res){
console.log('Socket IO server has been started');
});
// upgrade http server to socket.io server
var io = require('socket.io').listen(httpServer);
var count = 0;
var rooms = new Array() ;
app.get('/:room',function(req,res){
console.log('room name is :'+req.params.room);
res.render('index',{room:req.params.room});
});
io.sockets.on('connection',function(socket){
socket.on('joinroom',function(data){
socket.join(data.room);
socket.set('room', data.room,function() {
var room = data.room;
var nickname = '손님-'+count;
socket.emit('new', {nickname: nickname});
// Create Room
if(rooms[room] == undefined ){
console.log('room create :'+room);
rooms[room] = new Object();
rooms[room].nicknames = new Object();
rooms[room].socket_ids = new Object();
}
// Store current user's nickname and socket.id to MAP
rooms[room].socket_ids[nickname] = socket.id
rooms[room].nicknames[socket.id] = nickname;
// broad cast join message
data = {msg : nickname +' 님이 입장하셨습니다.'};
io.sockets.in(room).emit('broadcast_msg',data);
// broadcast changed user list in the room
io.sockets.in(room).emit('userlist',{users:Object.keys(rooms[room].socket_ids)});
count++;
});
});
socket.on('changename',function(data){
socket.get('room',function(err,room){
var nickname = data.nickname;
// if user changes name get previous nickname from nicknames MAP
var previous_nickname = rooms[room].nicknames[socket.id];
if(previous_nickname != undefined){
delete rooms[room].socket_ids[previous_nickname];
}
rooms[room].socket_ids[nickname] = socket.id
rooms[room].nicknames[socket.id] = nickname;
data = {msg : previous_nickname +' 님이 '+nickname+'으로 대화명을 변경하셨습니다.'};
io.sockets.in(room).emit('broadcast_msg', data);
// send changed user nickname lists to clients
io.sockets.in(room).emit('userlist',{users:Object.keys(rooms[room].socket_ids)});
});
});发布于 2016-10-21 10:39:59
确定:简单地说,
将套接字连接保存在app.js或server.js文件中。
只需遵循以下代码:
var http = require('http').Server(app);
var io = require('socket.io')(http);现在启动连接,例如:
io.on('connection', function(socket){
console.log("A user connected");
}):每当您运行服务器文件时,都会打印“用户连接”。意味着,一个客户端已连接到服务器。
要断开到服务器的连接:io.on(‘连接’,函数(套接字){console.log(“用户连接”);
socket.on('disconnect',function(){
console.log("a user disconnected");
});
}):现在,您可以向连接到服务器的所有人发送一条消息:
socket.on('chat message', function(data){
socket.emit('chat message', msg);
});如果要向所有排除发送者发送消息:
socket.on('chat message', function(data){
io.broadcast.emit('chat message', msg);
});如需更多参考:Send response to all clients except sender (Socket.io)
我希望你对此有个想法!祝好运
https://stackoverflow.com/questions/23170567
复制相似问题