創建一個基本的TCP服務器,任何人都可以連接到該服務器,無需實現任何協議或者指令:
1、成功連接到服務器後,服務器會顯示歡迎信息,並要求輸入用戶。同時顯示當前有多少個其他客戶端已經連接。
2、輸入用戶名,回車,確認連接。
3、連接好後,輸入信息回車,將信息向其他客戶端發送。
首先創建項目目錄:tcp-chat
在tcp-chat文件夾中,創建package.json文件
{
"name" : "tcp-chat",
"version" : "0.0.1",
"description" : "Our first Tcp Server"
}
創建index.js文件
/* 模塊依賴 */
var net = require('net');
/* 追蹤用戶連接數 */
var count = 0;
/* 定義用戶 */
var users = {};
/* 創建服務器 */
var server = net.createServer(function(conn) {
// 處理連接
console.log('\033[90m net connection! \033[39m');
// 處理編碼
conn.setEncoding('UTF-8');
// 代表當前鏈接的暱稱
var nickname = null;
// 向客戶端輸出信息
conn.write(
'\n > welcome to \033[90m node-chat \033[39m!'
+ '\n > ' + count + ' other people are connected at this time.'
+ '\n > please write your name and press enter: '
);
count++;
// 監聽data事件
conn.on('data', function(data) {
// 刪除回車符
data = data.replace('\r\n', '');
// 接受用戶暱稱
if (!nickname) {
// 不允許暱稱重複
if (users[data]) {
conn.write('\033[93m nickname already in use. please try again: \033[39m');
return;
} else {
nickname = data;
users[nickname] = conn;
for (var i in users) {
broadcast('\033[90m > ' + nickname + ' joined the room\033[39m\n');
// users[i].write('\033[90m > ' + nickname + ' joined the room\033[39m\n');
}
}
} else {
// 聊天信息
for (var i in users) {
// 發送信息給除自己之外的其他客戶端
if (i != nickname) {
broadcast('\033[90m > ' + nickname + ' : \033[39m' + data + '\n');
// users[i].write('\033[90m > ' + nickname + ' : \033[39m' + data + '\n');
}
}
}
console.log(data);
});
// 當客戶端關閉,計數器變量遞減
conn.on('close', function() {
count--;
// 客戶端關閉後,應該刪除用戶信息
delete users[nickname];
// 告訴其他客戶端,有客戶端退出
broadcast('\033[90m > ' + nickname + ' left the room\033[39m\n')
});
});
/* 監聽 */
server.listen(3000, function() {
console.log('\033[96m server listening on *:3000 \033[39m');
});
/* 向用戶廣播信息 */
function broadcast(msg, exceptMyself) {
for (var i in users) {
if (!exceptMyself || i != nickname) {
users[i].write(msg);
}
}
}
項目運行前再CMD輸入npm install ,添加項目需要的依賴;該項目沒有外部依賴,最好還是運行一下,養成習慣,避免後期麻煩。然後輸入node index.js 啓動項目。
說明一下,我的系統是win10,telnet客戶端無法打開所以在CMD中打開bash方式使用telnet客戶端。win10中打開bash的方法請自行搜索。
根據提示輸入用戶暱稱,並多啓動幾個客戶端即可測試項目。
注:以上內容爲學習筆記,摘自《了不起的Node.js》