【问题标题】:HTML file can't connect to socketioHTML 文件无法连接到 socketio
【发布时间】:2021-02-26 03:11:01
【问题描述】:

我的文件系统中有一个新的 HTML 文件,如图所示:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Minimal working example</title>
</head>

<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
    <script>
        const socket = io("http://localhost:5000", {
            transports: ['websocket']
        });

        socket.on('connect', () => console.log("connect"));
    </script>
</body>

</html>

我还有一个在 localhost 上运行的 javascript socketio 服务器:

const express = require("express")
const SocketIO = require("socket.io")
const http = require("http")

const app = express()
const PORT = process.env.PORT || 5000

const server = http.createServer(app)
const io = SocketIO(server)

app.get("/", (_, res) => res.send("Home"))

io.on("connection", socket => {
    console.log("connection!")
})

server.listen(PORT, () => console.log(`Sever running on ${PORT}`))

为什么我的服务器从不记录任何东西???

【问题讨论】:

  • 只是在黑暗中刺了一下,但是当你打开HTML时,是file://还是http://
  • 我很确定是 http://

标签: javascript html node.js websocket socket.io


【解决方案1】:

从同一个后端服务前端

经过仔细检查,您没有从同一主机/端口提供 HTML 文件。您的 index.html 文件在尝试连接时可能会出现 CORS 错误,因为它未经批准是跨源的。

我替换了这一行:

app.get("/", (_, res) => res.send("Home"))

用这条线。从同一文件夹提供 index.html 文件(不推荐)

app.use(express.static('.'))

两者都在同一个域上运行,连接成功记录。

【讨论】:

  • 我不使用同一主机的原因是因为我试图将 Java socket.io 连接到这个 NodeJS 服务器。这是针对此特定问题的正确解决方案,但我真正需要帮助的是如何将 Java 代码(与服务器的主机/端口不同)连接到服务器。如果您可以提供如何将任何主机/端口的任何 HTML 文件连接到我的服务器的解决方案,那将有更多帮助:)
  • @zS1L3NT 需要明确的是,您是在尝试使用 websockets 连接 Java 应用程序,还是使用 Java 应用程序提供的 HTML 连接?
  • 我正在尝试将在任何机器上运行的 Java 脚本连接到我的服务器,无论它在什么主机上,它都在执行。它可以在朋友的电脑上运行,我的电脑都连接到同一个 NodeJS 服务器
  • 那么我的解决方案就是您想要的解决方案。我认为您遇到的困惑是其他人在不同的计算机上。这些计算机连接到同一台服务器,这很重要。不是他们从哪里连接,而是他们连接到什么。
  • 我尝试将 Java Socket.IO 连接到我的 NodeJS 服务器,但出现“服务器错误”和“xhr 轮询错误”。我猜这是一个 CORS 问题,那么如何将我的 Java Socket.IO 连接到 NodeJS 服务器?
【解决方案2】:

在 JavaScript 领域呆了很长时间后,我找到了解决这个问题的方法,这可能对看到这篇文章的任何人都有帮助。

解决这个问题的方法是更改​​我使用的 socket.io 版本。我不确定上面示例中服务器使用的是什么版本。我尝试再次运行相同的脚本,但这次使用的是最新且兼容的服务器和客户端版本的 socket.io (v4.x)。无论使用何种协议(file:///http://),套接字都能成功连接。

这在 socket.io 文档here 中。如果您希望套接字连接,请确保客户端和服务器版本兼容。因此,我假设我创建这篇文章时是版本不兼容造成的。

我希望这篇文章对某人有所帮助:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2014-02-16
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2017-07-30
    • 2018-03-21
    相关资源
    最近更新 更多