使用nodejs分別搭建一個服務器和客戶端,模擬問答精靈


    嘻嘻。最近在玩nodejs,在我的學習以及理解中nodejs的執行環境主要是分為三個部分的,首先會有一個global的全局對象,然后在這個全局對象中又包含有一個核心模塊和文件模塊(可以理解為是用戶自己寫的文件)的。

    並且nodejs具有兩個特點的,那就是1、是一個非阻塞的I/O模型,也就是說nodejs的操作是異步的。2、是基於事件驅動的程序設計思想的。

    今天主要是通過自己搭建服務器和客戶端,讓兩者之間進行通信,模擬出類似問答精靈的一個效果的。在這之前,我們是很有必要了解一下服務器與瀏覽器之間是怎樣進行交互的,其實在服務器端和瀏覽器端都各自具有一個叫做socket的東西,它就是負責接收以及發送信息的。也就是說瀏覽器端會通過socket來發送請求,而服務器端也會通過自己的一個socket向瀏覽器端作出響應處理。

    在這個小案例中我們主要用到的一個nodejs的核心模塊是“net核心模塊”,通過這個模塊的方法我們可以創建服務器以及建立服務器與客戶端的連接等功能的。

    好了,還是直接上代碼吧。

    服務器端的代碼(server.js):

   

 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中分別運行服務器和客戶端的時候,就可以實現類似問答精靈的效果了。

   注意:要先開啟服務器,然后再開啟客戶端才能正常運行的窩。

   效果如下面的圖片展示:

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM