美文网首页
(二)数据推送之websocket

(二)数据推送之websocket

作者: mkv_me | 来源:发表于2017-12-11 11:03 被阅读0次

    介绍

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

    为什么要用到socket.io呢?

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

    服务器端

    • 第一步我们建一个express项目
    cnpm install express --save
    cnpm install -g express-generator
    express
    
    • 第二步我们要在项目文件里安装socket.io
    cnpm install socket.io --save
    
    • 第二步我们在node_module里面找到socket.io.js这个文件,这是给前端用的

    文件在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

    相关文章

      网友评论

          本文标题:(二)数据推送之websocket

          本文链接:https://www.haomeiwen.com/subject/miqiixtx.html