服务端:
//http://www.open-open.com/lib/view/open1402479198587.html
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/hello', function(req, res){
res.setHeader("Access-Control-Allow-Origin", "*");
res.send('hello');
});
//在线用户
var onlineUsers = [];
io.on('connection', function(socket){
console.log('a user connected');
//监听新用户加入
socket.on('login', function(obj){
//将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到
socket.name = obj.name;
//检查在线列表,如果不在里面就加入
if(onlineUsers.indexOf(obj.name) == -1) {
onlineUsers.push(obj.name);
//向所有客户端广播用户加入
io.emit('login', {onlineUsers:onlineUsers});
console.log(obj.name+'加入了聊天室');
}else{
socket.send('已存在相同用户')
}
});
//监听用户退出
socket.on('disconnect', function(){
//将退出的用户从在线列表中删除
if(onlineUsers.indexOf(socket.name) != -1) {
//退出用户的信息
onlineUsers.splice(onlineUsers.indexOf(socket.name),1)
//向所有客户端广播用户退出
io.emit('logout', {onlineUsers:onlineUsers});
console.log(socket.name+'退出了聊天室');
}
});
//监听用户发布聊天内容
socket.on('message', function(obj){
//向所有客户端广播发布的消息
io.emit('message', obj);
console.log(obj.name+'说:'+obj.content);
});
});
http.listen(8081, function(){
console.log('listening on *:8081');
});
客户端:
var SocketIO = SocketIO || io
cc.Class({
extends: cc.Component,
properties: {
nameLabel:cc.EditBox,
contentLabel:cc.Label,
inputLabel:cc.EditBox,
_nameArr:[],
_ipAdd:"",
_port:0,
_socket:null
},
loginHandler:function () {
this._ipAdd = "http://192.168.1.162";
this._port = 8081;
var num
var that = this
var socket = SocketIO.connect(this._ipAdd+":"+this._port);
this._socket = socket
socket.on('connect', function(){
cc.log('connect')
socket.emit('login',{name:that.nameLabel.string});
});
socket.on('login', function(data){
that._nameArr.push(data.onlineUsers[0])
that.outputTxt(data.onlineUsers[data.onlineUsers.length-1]+" 登录成功")
cc.log('someone login', data)
});
socket.on('message', function(data){
that.outputTxt(data.name+":"+data.msg)
cc.log('get event', data)
});
socket.on('disconnect', function(){
cc.log('disconnect')
});
},
// use this for initialization
onLoad: function () {
},
outputTxt:function(txt){
this.contentLabel.string += txt+"\n"
},
sendHandler:function () {
var that = this
this._socket.emit('message', {name:that.nameLabel.string, msg:that.inputLabel.string})
}
});