在多个客户端与服务器端建立连接后,Socket.IO服务器具有一个sockets属性,属性值为所有与客户端建立连接的socket对象。可以利用该对象的send方法或emit方法向所有客户端广告消息。
IO.sockets.send('user connected'); //发送user connected消息
IO.sockets.emit('login',names); //发送login事件,携带names对象
示例:
该示例代码中,我们首先指定一个names数组,用于存放所有用户名。当与客户端建立链接后,向该客户端发送login事件,事件携带数据为 names数组,以向该客户端发送所有用户名。当某个用户访问网站时,立即可以看见所有已经登录网站的用户名(不包括自己)。当服务器端接收到客户端发送的login事件时,向所有客户端发送login事件,事件携带数据为names数组,以向所有客户端发送所有用户名。当某个用户登录网站时,立即可以看见所有已经登录网站的用户名(包括自己)。其它所有用户可以同时立即看见有哪个用户登录网站。
server.js代码如下:
var http = require('http');
var express = require('express');
var sio = require('socket.io');
var app = express();
var server = http.createServer(app);
app.get('/',function(req,res){
res.sendfile(__dirname + '/index.html');
});
server.listen(1337);
var io =sio.listen(server);
var names = [];
io.sockets.on('connection',function(socket){
socket.emit('login',names);
socket.on('login',function(name){
names.push(name);
io.sockets.emit('login',names);
})
})
index.html代码如下:
var socket = io.connect();
socket.on('login',function(names){
var str = '';
names.forEach(function(name){
str += '用户' + name + '已登录.
'
});
document.getElementById('result').innerHTML = str;
})
function add(){
socket.emit('login',document.getElementById('nickname').value);
}