繁体   English   中英

Socket.io“发射但没有响应”

[英]Socket.io "emitting but not responding"

我正在开发一个实时 socket.io 项目。 这将是一个协作白板应用程序。 我发射有问题。

服务器.js

 const express = require('express')
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http, {
    cors: {
        origin: '*',
    }
});
app.use('/',express.static('ui'))

var connections = []

io.on('connect', (socket) => {
    
    connections.push(socket)
    console.log(`${socket.id} has connected`);

    io.emit('currentCanvas')
    //socket.emit('currentCanvas') both of these doesnt work

    socket.on('image-data', (imageData) =>{
        socket.emit('setImageData', imageData);
    })

    socket.on('disconnect', () => {
        connections = connections.filter((cn) => cn.id !== socket.id);
        console.log(`${socket.id} is disconnected`);
    })

    socket.on('draw', (data) => {
        socket.broadcast.emit('onDraw',data)
    })
    
    socket.on('down',(data) =>{
        socket.broadcast.emit('onDown',data)
    } ) 

})

http.listen(5000, () => console.log('listening on port 5000'));

客户端连接后,我无法发出“当前画布”

    var canvas = document.getElementById('my-canvas');

canvas.width = 0.98 * window.innerWidth;
canvas.height = 0.9 * window.innerHeight;

var io = io();
 
let ctx = canvas.getContext('2d');
let x,y;
let lineActive = false;

canvas.addEventListener('click',(e) => {
    lineActive = !lineActive
    ctx.moveTo(x, y)
    io.emit('down',{x,y})
})

io.on('onDraw', (data) => {
    ctx.lineTo(data.x,data.y)
    ctx.stroke();
})

io.on('onDown', (data) => {
    lineActive = !lineActive
    ctx.moveTo(data.x, data.y)
})

io.on('currentCanvas', () =>{
    var imageData = ctx.getImageData(0,0,canvas.width,canvas.height)
    console.log(io.id + "current-canvas alındı");
    //io.emit('image-data',imageData)
});

io.on('deneme', () =>{
    console.log('deneme');
})

io.on('setImageData',(imageData) =>{
    ctx.putImageData(imageData,0,0)
})

window.onmousemove = (e)=>{
    x = e.clientX;
    y = e.clientY;

    if(lineActive){
        io.emit("draw",{x,y})
        ctx.lineTo(x,y)
        ctx.stroke();
    }
}

当我从调试中查看时,我知道它是由服务器发出的,但不是从客户端收到的

调试终端

在此处输入图像描述

我不知道它可能是什么。 提前致谢。

Lawrence Cherone 在评论区找到解决方案。

将所有客户端事件定义和逻辑包装在 socket.on('connect', () => { 将 io.emit('currentCanvas') 移动到服务器部分的底部,就像连接时一样触发

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM