一直没写过联网的程序,在这个互联网时代怎么混啊!!!
恩,要写咱就从server到client写一套,把整个流程跑通,一把年纪了,也算是向Mark Zuckerberg致个小敬吧。
一直对server端要处理大规模的并发消息心存畏惧,感觉不把LAMP全学一遍,都不敢动手。
听同事推荐了Nodejs,说是写聊天程序的server端比较简单易上手,正合我意,于是乎,入门ing。。。
Sublime Text配置:
Tools-> Build system -> New Build system
{
"cmd": ["node", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.javascript"
}
SRC:
console.log('Coloerful word'.rainbow);
var count = 0;
var users = {};
var net = require('net');
var server = net.createServer(function (conn) {
conn.setEncoding('utf8');
console.log('New connection!');
conn.write('\n > welcome to server' +
'\n >' + count + ' other peple here.' +
'\n > please enter your name:');
count++;
var nickname;
conn.on('data', function (data) {
console.log('data:' + data);
//Remove the enter
data = data.replace('\r\n', '');
//First enter is name
if (!nickname){
if(users[data]) {
conn.write('This user ' + data + ' already been registed\n');
return;
} else {
nickname = data;
users[nickname] = conn;
broadcast(nickname + " join in chat!\n", true);
}
} else {
//Now enter the message
broadcast(data, true);
}
});
conn.on('close', function () {
count--;
console.log('Count:' + count);
delete users[nickname];
broadcast("I quit\n", true);
});
function broadcast(msg, exceptMe) {
for(var i in users) {
if (!exceptMe|| i !=nickname) {
users[i].write(nickname + ':' + msg + '\n');
}
}
}
console.log('Count:' + count);
});
server.listen(process.argv[2], function () {
console.log('Server listening on *:' + process.argv[2]);
});