嘻嘻。最近在玩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中分别运行服务器和客户端的时候,就可以实现类似问答精灵的效果了。
注意:要先开启服务器,然后再开启客户端才能正常运行的窝。
效果如下面的图片展示: