(二)数据推送之websocket

2017-12-11  本文已影响0人  mkv_me

介绍

websocket它是一种长连接,通过websocket我们能实现后端向前端推送数据,前端也可以向后端推送数据。这里我们主要讲前端H5 websocket怎样和nodejs配合。

为什么要用到socket.io呢?

因为它承载了socket大部分功能,而且相对稳定

服务器端

cnpm install express --save
cnpm install -g express-generator
express
cnpm install socket.io --save

文件在node_modules/socket.io-client/dist/socket.io.js

接下来我们在app.js中引入socket.io

var express = require('express');
var path = require('path');

var app = express();

var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
    
app.set('port', 3000);
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(express.static(path.join(__dirname, 'public')));

io.on('connection',function(socket){
    socket.emit('open'); // 通知客户端已连接
    
    // 对message事件的监听
    socket.on('message',function(msg){
        console.log('this is msg:',msg);
        socket.emit('test','server ready'); 
    });

    // 监听退出事件
    socket.on('disconnect',function(){});
})

app.get('/',function(req, res){
    res.sendfile('views/index.html');
});

server.listen(app.get('port'),function(){
    console.log("socket server listen" + app.get('port'));
});

在views文件夹里建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    hello
    <script src="javascripts/socket.io.js"></script>
    <script src="javascripts/main.js"></script>
</body>
</html>

在静态文件javascripts文件夹下建main.js

(function(){
    var i = 0;
    // 建立websocket连接
    var socket = io.connect("http://localhost:3000");
    // 收到server的连接确认
    socket.on('open',function(){
        console.log('已连接');
        socket.send("ok");
    })
    socket.on('test',function(json){
        console.log('test',json);
    })
})();

具体步骤:

  1. 在app.js文件中用socket.io监听server端口
  2. 在main.js文件中建立websocket连接
  3. app.js会在connect事件中监听到连接,并触发open(自己定义的)事件
  4. 此时前端监听到open事件
  5. 同时前端也可以用socket连接用send方法向后端推送消息
  6. 后端会在message事件中监听到前端推送过来的消息

更多方法请查 官网api

上一篇下一篇

猜你喜欢

热点阅读