繁体   English   中英

socket.io.js:1407 GET http://localhost:3000/socket.io/?EIO=4&transport=polling&t=ONrJFW3 404(未找到)

[英]socket.io.js:1407 GET http://localhost:3000/socket.io/?EIO=4&transport=polling&t=ONrJFW3 404 (Not Found)

我无法将我的客户端连接到我的服务器,我正在使用 socket.io v4 我的服务器 node.js 在端口 3000 上运行,套接字在我的项目运行的端口 80 上运行,我尝试添加传输,我阅读了文档但不知道发生了什么,也许你的配置错误,但我找不到解决方案

服务器端

var express = require('express');
const { Server } = require("socket.io")
const http = require('http');
const Sockets = require('./sockets');
//const socketsIO = require('./socket.io');


var app = express();

const miserver = http.createServer(app);

app.use(express.static(__dirname + '/public'));

const httpserver = miserver.listen(3000);
console.log("Servidor corriendo en el puerto 3000");

//incluir socket IO
const el_io = new Server(httpserver, {
    cors: {
        origin: "http://localhost:80",
        methods: ['POST', 'GET'],
        credentials: true
    }
});

Sockets(el_io);

客户端

<script src="../socket.io.js"></script>

<script>
    //conectar con el servidor Node.js
    //var socketIO = io("http://localhost:80", {
    //    transports: ['websocket', 'polling', 'flashsocket'],
    //});

    var socketIO = io('ws://localhost:3000/socket.io/?EIO=3&transport=websocket');

    function markAsRead() {
        //evitar que el formulario se envie
        event.preventDefault();

        //obtener el nodo del formulario
        var form = event.target;

        //crear objeto AJAX
        var ajax = new XMLHttpRequest();

        //seleccionar el metodo y la URL of request
        ajax.open("POST", "leer-notificacion.php", true);

        //cuando el status de la peticion cambie
        ajax.onreadystatechange = function() {

            //cuando la respuesta es recibida desde el servidor
            if (this.readyState == 4 && this.status == 200) {
                var data = JSON.parse(this.responseText);
            }


            if (data.status == "success") {

                //se remueve el boton 'read'
                form.remove();

                socketIO.emit("notificationRead", form.user_id.value);
            }
        }

        //crear un objeto con la data del formulario
        var formData = new FormData(form);

        // mandar peticion AJAX con la data del formulario
        ajax.send(formData);
    }
</script>

我希望连接到服务器,因为需要更新我的前端

socket 在 80 端口运行

您显示的这段代码中没有任何内容在端口 80 上运行。您显示了在端口 3000 上运行的一个 http 服务器的创建。

另外,这个:

io('ws://localhost:3000/socket.io/?EIO=3&transport=websocket');

是错的。 路径和参数是 socket.io 添加到 URL 本身的东西。 你应该这样做:

const socketIO = io('http://localhost:3000');

而且,如果你想避免 CORs 问题,你可以像这样将 socket.io 到 go 直接告诉 webSocket:

const socketIO = io('http://localhost:3000', {transports: ['websocket']});

暂无
暂无

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

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