• websocket 实现 前端vue-socket.io 服务端 koa2(socket.io)


    前端:(vue项目,main.js)

    // The Vue build version to load with the `import` command
    // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    import App from './App'
    import router from './router'

    // import VueNativeSock from 'vue-native-websocket'
    // Vue.use(VueNativeSock, 'ws://localhost:3000', {
    // passToStoreHandler: function (eventName, event, next) {
    // event.data = event.should_have_been_named_data
    // next(eventName, event)
    // }
    // })


    import VueSocketIO from 'vue-socket.io'

    Vue.use(new VueSocketIO({
    debug: true,
    connection: 'ws://localhost:8888/self',
    forceNew: true,
    // vuex: {
    // store,
    // actionPrefix: 'SOCKET_',
    // mutationPrefix: 'SOCKET_'
    // },
    options: { path: "" } //Optional options
    }))

    Vue.config.productionTip = false

    /* eslint-disable no-new */
    new Vue({
    el: '#app',
    router,
    components: { App },
    template: '<App/>'
    })
     
    前端--在组件中使用:(HelloWorld.vue 组件)
    <template>
    <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    </div>
    </template>

    <script>
    export default {
    name: "HelloWorld",
    data() {
    return {
    msg: "Welcome to Your Vue.js App"
    };
    },
    mounted() {
    this.onsocket();

    this.sockets.subscribe("client_event", data => {
    console.log(data);
    // this.msg = data.message;
    });
    },
    sockets: {
    connect: function() {
    console.log("客户端检测到 socket connected------------");
    },
    server_event: function(data) {
    console.log(
    ' 服务端定义的事件名字:"server_event" socket server. eg: io.emit("server_event", data)'
    );
    console.log(data);
    }
    },
    methods: {
    onsocket() {
    this.$socket.emit("client_event", { origin: "client" });
    }
    }
    };
    </script>

    <!-- Add "scoped" attribute to limit CSS to this component only -->
    <style scoped>
    h1,
    h2 {
    font-weight: normal;
    }
    ul {
    list-style-type: none;
    padding: 0;
    }
    li {
    display: inline-block;
    margin: 0 10px;
    }
    a {
    color: #42b983;
    }
    </style>
     
     
     
    ----------------------------------------------------------------------------------------------------------------
     
     
     
    服务端:(koa2项目,app.js)
     
    const Koa = require('koa')
    const app = new Koa()
    const views = require('koa-views')
    const json = require('koa-json')
    const onerror = require('koa-onerror')
    const bodyparser = require('koa-bodyparser')
    const logger = require('koa-logger')

    const index = require('./routes/index')
    const users = require('./routes/users')



    // error handler
    onerror(app)

    // middlewares
    app.use(bodyparser({
    enableTypes:['json', 'form', 'text']
    }))
    app.use(json())
    app.use(logger())
    app.use(require('koa-static')(__dirname + '/public'))

    app.use(views(__dirname + '/views', {
    extension: 'pug'
    }))

    // logger
    app.use(async (ctx, next) => {
    const start = new Date()
    await next()
    const ms = new Date() - start
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
    })

    // routes
    app.use(index.routes(), index.allowedMethods())
    app.use(users.routes(), users.allowedMethods())

    // error-handling
    app.on('error', (err, ctx) => {
    console.error('server error', err, ctx)
    });


    //using websocket
    // const server = require('http').createServer(app.callback());
    // const io = require('socket.io')(server);
    // io.on('connection', client => {
    // console.log("有连接动作");
    // client.on('event', data => { /* … */ });
    // client.on('disconnect', () => { /* … */ });
    // });

    const io = require('socket.io')();

    // io.on('connection', client => {
     
    // });

    io.of('/self').on('connection', client => {
    console.log("服务端检测到连接----") ;
    var data_obj={
    name:"name",
    age:12
    }
    io.of('/self').emit('server_event',data_obj); // emit an event to all connected sockets

    client.on("client_event",function(data){
    console.log("client_event");
    console.log(data)
    })

    client.on('disconnect', () => { /* … */ });
    });
    io.listen(8888);


    // server.listen(8888);

    module.exports = app
     
     
     
     
    ----完----
     
    上述代码复制粘贴可用。
  • 相关阅读:
    asp.net mvc controller调用js
    无刷新文件上传 利用iframe实现
    Git使用
    easyui扩展
    Highcharts 多个Y轴动态刷新数据
    Android之Handler
    asp.net mvc之TempData、ViewData、ViewBag
    android之滑屏的实现
    java多线程系类:JUC线程池:05之线程池原理(四)(转)
    java多线程系类:JUC线程池:04之线程池原理(三)(转)
  • 原文地址:https://www.cnblogs.com/liuliu-hai/p/10995378.html
Copyright © 2020-2023  润新知