TCP面向连接的通信协议,具有保证顺序传递,面向字节,可靠的特点,创建sever.js代码如下:
var net = require('net')
var count = 0, users={}
var server = net.createServer((conn) => {
console.log('\033[90m new connection!\033[39m')
var nickname
conn.setEncoding('utf8')
conn.write(
'\n > welcome to \033[92m node-chat \033[39m!' + '\n>' + count + ' other people are connected at this time.' + '\n > please write your name and press enter'
)
count++
conn.on('close', function() {
console.log('connection colse!')
count--
})
conn.on('data', function(data) {
console.log(nickname + '> ' + data)
data = data.replace('\r\n', '')
if(!nickname) {
if(users[data]) {
conn.write('\033[93m> nickname already in use. try again:\033[39m ')
return
} else {
nickname = data
users[nickname] = conn
for (var i in users) {
boardcast('\033[90m > ' + nickname + ' joined the room \033[39m\n', nickname == i)
}
}
} else {
//聊天
for(var i in users) {
boardcast('\033[96m > ' + nickname + ':\033[39m ' + data + '\n', nickname == i)
}
}
})
function boardcast(msg, exceptMyself) {
for(var i in users) {
if(!exceptMyself) {
users[i].write(msg)
}
}
}
conn.on('end', function() {
count--
delete users[nickname]
boardcast('\033[96m > ' + nickname + ' left the room\033[39m\n')
})
})
server.listen(3000, function() {
console.log('\033[96m server listening on *:3000\033[39m')
})
启动服务
node server.js
启动两个终端模拟两个用户: