用终端来演示聊天室:
1.1 ServerSocket.js
const server = new net.createServer()
let clients = {
}
let clientName = 0
server.on('connection', (client) => {
client.name = ++clientName
clients[client.name] = client
client.on('data', (msg) => {
// console.log('客户端传来:' + msg);
broadcast(client, msg.toString())
})
client.on('error', (e) => {
console.log('client error' + e);
client.end()
})
client.on('close', () => {
delete clients[client.name]
console.log(client.name + ' 下线了');
})
})
const broadcast = (client, msg) => {
for (let key in clients) {
clients[key].write(client.name + ' 说:' + msg)
}
}
server.listen(9000, 'localhost', () => {
console.log('opened server on', server.address());
})
1.2 ClientSocket.js
const net = require('net')
const readline = require('readline')
const port = 9000
const host = '127.0.0.1'
const socket = new net.Socket()
socket.setEncoding = 'UTF-8'
socket.connect(port, host, () => {
socket.write('上线了.')
})
socket.on('data', (msg) => {
console.log(msg.toString())
say()
})
socket.on('error', (err) => {
console.log('error' + err);
})
socket.on('close', () => {
console.log('connection closeed');
})
const r1 = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const say = () => {
r1.question('', (inputMsg) => {
if (inputMsg !== 'bye') {
socket.write(inputMsg + '\n')
} else {
socket.destroy()
r1.close()
}
})
}