标签:
1.创建一个聊天服务器 TCP 支持Telnet 连接
1 // 创建TCP 2 var net = require(‘net‘); 3 var chatServer = net.createServer(), 4 // 保存客户端 5 clientList = []; 6 chatServer.on(‘connection‘, function(client) { 7 client.name = client.remoteAddress + ‘:‘ + client.remotePort; 8 client.write(‘hi‘ + client.name + ‘\n‘); 9 // 添加客户端 10 clientList.push(client); 11 // 开始 12 client.on(‘data‘, function(data) { 13 broadcast(data, client) 14 }); 15 // 结束 16 client.on(‘end‘, function() { 17 clientList.splice(clientList.indexOf(client), 1) 18 }) 19 // 错误 20 client.on(‘error‘, function(e) { 21 console.log(e) 22 }) 23 }); 24 25 function broadcast(message, client) { 26 var cleanup = []; 27 for (var i = 0; i < clientList.length; i += 1) { 28 if (client !== clientList[i]) { 29 if (cleantList[i].writable) { 30 clientList[i].write(client.name + " says " + message) 31 } else { 32 // 销毁退出的客户id 内存 33 cleanup.push(clientList[i]) 34 clientList[i].destroy() 35 } 36 } 37 } 38 // 消除垃圾索引 39 for (i = 0; i < cleanup.length; i += 1) { 40 clientList.splice(clientList.indexOf(cleanup[i]), 1) 41 } 42 } 43 44 chatServer.listen(8080)
调用broadcast 函数的时候,检查一下socket 是否可写,以确保不会因为任何
一个不可写的socket 导致异常。不仅如此, 发现任何不可写的socket 后, 还要
通过Socket.destroy() 方法将其关闭并从clientList 中移除。注意, 遍历
clientList 的过程中并没有移除socket,因为我们不想在遍历过程中出现任何未
知的副作用。现在我们的服务器更加健壮了。在真正部署之前,还有一件事情要处
理,那就是记录这些错误.
标签:
原文地址:http://www.cnblogs.com/xxygogo/p/4923024.html