WebSocket
WebSocket实现了,在客户端和服务端上建立了一个长久的连接,两边可以任意发数据嗨皮
当然如果知道的更深一层的话,要知道它属于应用层的协议,它基于TCP传输协议,并复用HTTP的握手通道。
Websocket的优势。需要安装ws包 npm i ws -S
1.支持双向通信,实施性更强
2.更好的二进制支持
3.较少的控制开销(连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较少)
基本用法:
// 创建一个index.html文件 // 下面直接写WebSocket // 只需要new一下就可以创建一个websocket的实例 // 我们要去连接ws协议 // 这里对应的端口就是服务端设置的端口号9999 //要连接的服务器 let ws = new WebSocket(\'ws://10.211.55.13:9999\'); // onopen是客户端与服务端建立连接后触发 ws.onopen = function () { ws.send(\'哎呦,不错哦\'); }; // onmessage是当服务端给客户端发来消息的时候触发 ws.onmessage = function (res) { console.log(res); // 打印的是MessageEvent对象 // 真正的消息数据是 res.data console.log(res.data); };
创建一个js文件
// ============================================= // 开始创建一个websocket服务 const Server = require(\'ws\').Server; // 这里是设置服务器的端口号,和上面的3000端口不用一致 const ws = new Server({ port: 9999, host: \'192.168.13.56\' }); // 监听服务端和客户端的连接情况 ws.on(\'connection\', function (client) { // 监听客户端发来的消息 client.on(\'message\', function (msg) { console.log(\'收到客户端发来的消息:\' + msg); // 这个就是客户端发来的消息 // 来而不往非礼也,服务端也可以发消息给客户端 client.send(`这里是服务端对你说的话: ${msg}`); }); });
这样就搭了一个后台服务了,打开 index.html 在控制台就可以看到消息了
Nodejs做爬虫
爬下来的数据放到之前的文章上传里面
let axios = require(\'axios\'); let {Article} = require(\'../models\') // https://api.readhub.cn/topic?lastCursor=273387&pageSize=20 想要爬取的数据地址 let url = \'https://api.readhub.cn/topic\' axios.get(url,{params:{pageSize:20,lastCursor:273387}}) .then(res=>{ console.log(res.data.data) res.data.data.forEach(news=>{ let art = new Article({title:news.title,body:news.summary}) art.save() }) })
在终端中运行这个文件,即可实现爬虫
npm i cheerio -S
运用cheerio进行爬虫,语法是和jQuery的语法几乎相同,代码如下
let axios = require(\'axios\'); let {Article} = require(\'../models\') let cheerio = require(\'cheerio\') // https://api.readhub.cn/topic?lastCursor=273387&pageSize=20 let url = \'https://bbs.hupu.com/selfie\' axios.get(url) .then(res=>{ // console.log(res.data) $ = cheerio.load(res.data); $(\'.truetit\').each(function(i,v){ console.log($(v).text()); }) })