首页 > 解决方案 > Socket.io 节点服务器无法向电子应用程序发出事件

问题描述

我刚刚按照https://socket.io/get-started/chat的入门教程进行操作。它适用于浏览器上的 Web 客户端。但它不会向电子客户端发出任何事件。任何控制台中都没有错误消息。它只是不会将电子应用程序中的套接字连接到 socket.io 服务器。

问题似乎是 io.emit() 方法,注释该行使电子客户端可以成功连接到 socket.io 服务器。

这是nodejs服务器的代码:

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require('socket.io');
const io = new Server(server);

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {

    console.log('a user connected');

    socket.on('chat message', (msg) => {
        //io.emit('chat message', msg);
        console.log(msg);
    });
    
});

server.listen(3000, () => {
    console.log('listening on *:3000');
});

这是电子应用程序的 preload.js 的代码:

const io = require("socket.io-client");
const socket = io('http://localhost:3000');

socket.on('connect', () => {
    console.log('you are connected!');
});

window.addEventListener('DOMContentLoaded', () => {
    var messages = document.querySelector('#messages');
    var form = document.querySelector('#form');
    var input = document.querySelector('#input');

    form.addEventListener('submit', function (e) {
        e.preventDefault();
        if (input.value) {
            socket.emit('chat message', input.value);
            input.value = '';
        }
    });
})

标签: javascriptnode.jssocket.ioelectron

解决方案


推荐阅读