嘻嘻。最近在玩nodejs,在個人學習以及理解中nodejs的執行環境主要是分爲三個部分的,首先會有一個global的全局對象,而後在這個全局對象中又包含有一個核心模塊和文件模塊(能夠理解爲是用戶本身寫的文件)的。node
而且nodejs具備兩個特色的,那就是一、是一個非阻塞的I/O模型,也就是說nodejs的操做是異步的。二、是基於事件驅動的程序設計思想的。shell
今天主要是經過本身搭建服務器和客戶端,讓二者之間進行通訊,模擬出相似問答精靈的一個效果的。在這以前,咱們是頗有必要了解一下服務器與瀏覽器之間是怎樣進行交互的,其實在服務器端和瀏覽器端都各自具備一個叫作socket的東西,它就是負責接收以及發送信息的。也就是說瀏覽器端會經過socket來發送請求,而服務器端也會經過本身的一個socket向瀏覽器端做出響應處理。瀏覽器
在這個小案例中咱們主要用到的一個nodejs的核心模塊是「net核心模塊」,經過這個模塊的方法咱們能夠建立服務器以及創建服務器與客戶端的鏈接等功能的。服務器
好了,仍是直接上代碼吧。異步
服務器端的代碼(server.js):socket
1 //首先使用嚴格模式來規範文件 2 "use strict"; 3 //引入net核心模塊 4 const net = require("net"); 5 //建立服務器socket對象 6 let socketServer = net.createServer(); 7 8 //開啓服務器 9 socketServer.on("connection",(socket)=>{ 10 console.log("有客戶鏈接上來了"); //做爲測試是否有客戶鏈接 11 //當建立鏈接後就輸出下面的文本 12 socket.write("主人,小丫隨時恭候,爲您提供最優質的服務!"); 13 14 //當客戶端有數據發送過來,觸發下面的事件 15 socket.on("data",(content)=>{ 16 //處理用戶發送來的信息 17 var msg = content.toString().trim(); 18 //判斷用戶輸入的內容 19 if(msg != ""){ 20 switch(msg){ 21 case "你好!": 22 socket.write("主人,你好!有什麼可以幫助到您的嗎?"); 23 break; 24 case "早上好!": 25 socket.write("good morning!"); 26 break; 27 case "你好笨哎!": 28 socket.write("主人,我容許你說我笨,可是你不能夠侮辱個人智商。"); 29 break; 30 case "你傻不傻呀?": 31 socket.write("主人說我傻我就傻。可是,主人,你忍心說我傻嗎?"); 32 break; 33 case "早餐要吃什麼呢?": 34 socket.write("主人,你喜歡喲!不過記得要吃有養分的早餐呀!"); 35 break; 36 case "午飯吃什麼呢?": 37 socket.write("主人,你能夠選擇吃飯的喲。"); 38 break; 39 case "晚餐吃什麼呢?": 40 socket.write("主人,你好煩哎!"); 41 break; 42 default: 43 socket.write("不知道你在說什麼"); 44 break; 45 } 46 } 47 }); 48 //處理異常 49 socket.on("error",()=>{ 50 console.log("客戶掉線"); 51 }); 52 }); 53 54 //進行監聽 55 socketServer.listen(8088,'127.0.0.1',()=>{ 56 console.log("服務器已經開始"); 57 })
下面的是客戶端的代碼(client.js):學習
1 "use strict"; 2 const net = require("net"); 3 4 //獲得ip和端口 5 const ip = "127.0.0.1"; 6 const port = 8088; 7 //創建鏈接 8 var socket = net.createConnection(port,ip,()=>{ 9 //console.log("已鏈接上服務器"); 10 }); 11 //監聽服務器的數據 12 socket.on("data",(content)=>{ 13 console.log(`小丫:${content}`); 14 }); 15 16 //在客戶端添加一個輸入事件 17 process.stdin.on("readable",()=>{ 18 var msg = process.stdin.read(); 19 if(msg !=null){ 20 //將輸入的信息發送到服務器 21 socket.write(msg); 22 } 23 })
當在powershell中分別運行服務器和客戶端的時候,就能夠實現相似問答精靈的效果了。測試
注意:要先開啓服務器,而後再開啓客戶端才能正常運行的窩。ui
效果以下面的圖片展現:spa