一:什么是scoket?
网络上的两个程序通过一个双向的通信链接实现数据的交换,这个连接的一端称为一个 socket
【boothcdn(有在线bootstrap,然后将代码拷贝至本地)
cdn::①内容分发网络(把js/css/html等静态资源放到cdn去)
②就近原则(提高网页访问速度)】
二:通信流程
Paste_Image.png三:NodeJS 基于其自带 net 模块实现 socket(重要)
①服务端代码:server.js
var net = require(‘net’);
// 创建一个 socket 服务
var socket = net.createServer();
// 监听一个端口号
socket.listen(3000);
// 监听 connection 事件
socket.on(‘connection’, function(client) {
// 通过 data 事件接收客户端的消息
client.on(‘data’, function(msg) {
console.log(msg.toString());
});
// 通过 write 方法给客户端发消息
client.write(‘hello’);
})
②客户端代码:client.js
var net = require(‘net’);
// 创建一个 客服端对象,通过 new net.Socket();
var client = new net.Socket();
// 通过 connect 方法连接到服务器
client.connect(3000, ‘127.0.0.1’, function() {
// 链接成功
// 给服务端发消息
client.write(‘大家好,我是xxx’);
// 通过 data 事件接收服务端的消息
client.on(‘data’, function(msg) {
console.log(msg.toString());
})
})
四:NodeJS – 自带模块 readline
1:引入readline模块
2:创建readline实例
var rl = readline.createInterface(process.stdin, process.stdout)
3:调用实例方法或者监听实例事件
readline.question()
readline.on(‘line’)
readline.close()
readline.setPrompt()
readline.prompt()
案例:实现 输入输出的操作
// 1. 引入自带模块 readline
var readline = require('readline');
// 2. 创建 readline 实例对象
var rl = readline.createInterface(process.stdin, process.stdout);
// 3. 就是去是用 他的 方法或者 事件
// 提问的方法 question
// rl.question('你叫什么名字?', function(answer) {
// console.log(answer);
// })
// 监听 line 事件
console.log('请选择你要的服务:');
console.log('1: 洗脚');
console.log('2: 搓背');
console.log('3: 按摩');
console.log('4: 不好意思,进错门了,88');
rl.on('line', function(msg) {
switch (msg) {
case "1":
console.log('洗脚 50元一次');
break;
case "2":
console.log('搓背 100元一次');
break;
case "3":
console.log('按摩 1000元一次');
break;
case "4":
// 关闭当前的输入输出
rl.close();
break;
default:
console.log('对不起,没有这个服务,请重新选择');
break;
}
})
五:WebSocket
构建网页版的聊天室:
1个服务端(使用 nodejs 作为后台语言,借助外部模块 ws )
1个客户端(这里的客户端不是 cmd 而是一个 html页面 )
①服务端:server.js
// 引入 ws 模块的 Server 对象
var socket = require(‘ws’).Server;
// 创建 socket 服务
var ws = new socket({port: 3000});
// 监听 connection 事件
ws.on(‘connection’, function(client) {
// 通过 message 事件接收客户端的消息
client.on(‘message’, function(msg) {
console.log(msg.toString());
});
// 通过 send 方法给客户端发消息
client.write(‘hello’);
})
②客户端:client.html js 实现
// 连接服务器
var client = new WebSocket(‘ws://127.0.0.1:3000’);
// 通过 message 事件接收服务端消息
client.onmessage = function(e) {
// 注意这里的 e 是事件对象 要在消息是 e.data
}
// 通过 send 方法给服务端发送消息
client.send(‘xxxx’);
网友评论