首页 > 解决方案 > 为什么socket.io 让服务器的CPU 100%?Nuxt+koaJS

问题描述

我对 SocketIO + NuxtJS 有疑问。在生产模式下,由于我连接了 socketIO 服务器,有时服务器的 CPU 使用率突然达到 100%。如果您知道这个问题,请帮助我。谢谢..

也许我猜这个问题与断开事件“传输轮询”有关。我调试了 socket io 服务器日志,最后一个日志的行都是user disconnected: H2X9WQSD6DSzMFT-AAEO, polling.

我的后端代码

// server.js
…
const http = require('http')
const app = new Koa()
const socket = require('Socket.IO')
… 
const server = http.createServer(app.callback())
const io = socket(server)
…
io.sockets.on('connection', function(socket) {
    console.log('a user connected’)
    socket.on('message', message => {
        io.sockets.emit('message', message)
    })
    socket.on('disconnect', () => {
      console.log('user disconnected: ' + socket.id + ', ' + socket.handshake.query.transport)
    })
})
server.listen(port)
…

我的前端代码

// plugin/socket.js

import Vue from 'vue'
import io from 'Socket.IO-client'
Vue.prototype.$socket = io(process.env.HOST_URL)

// nuxt.config.js
...
plugins: [
 { src: '~/plugins/socket.js', ssr: false },
 ],
...

// pages/test.vue
...
export default {
 data() {
    return { messages: [], message: '' }
 },
 mounted() {
    this.$socket.on('message', message => {
        this.messages.push(message)
    })
 },
 beforeDestroy() {
    this.$socket.off('message')
 },
 methods: {
    //chat to server 
    handleChat() {
        if (this.message) {
            this.$socket.emit('message', this.message)
            this.message = ''
        }
    },
 }
}

CPU 100% 图片

标签: node.jsvue.jssocket.ionuxt.jskoa

解决方案


推荐阅读