【问题标题】:How to configure socket.io client for backend access如何为后端访问配置 socket.io 客户端
【发布时间】:2021-04-27 11:19:38
【问题描述】:

我制作了一个简单的 Web 应用程序,它包含一个 nodejs 调度程序后端和一个使用 socket.io 连接的 quasar spa 前端。 我知道如何配置客户端连接到本地主机,但如果我尝试在网络上的另一台设备上打开相同的前端,逻辑上无法连接。 考虑到我将在 docker 容器上同时托管服务器和客户端,我如何将 socket.io 配置为可在 localhost 之外访问?

后端:

const app = require('express')();
const http = require('http')
  .createServer(app)
  .listen(config.socketPort, config.socketIP, function() { // Being: 0.0.0.0:3002
    console.log(
      `socket: websocket listening on ${config.socketIP}:${config.socketPort}`
    );

    const io = require('socket.io')(http, {
      cors: {
        origin: '*'
      },
    });
...

前端:

import io from 'socket.io-client'

const socket = io.connect('http://localhost:3002')

export default ({ Vue }) => {
  Vue.prototype.$socket = socket
}
export { socket }

【问题讨论】:

    标签: node.js express sockets socket.io quasar-framework


    【解决方案1】:

    您在客户端/前端代码中使用 localhost。这里需要使用服务器ip或者域名。

    编辑 前端代码应用程序托管在服务器中,只是为了让用户有可能获得它。之后,浏览器将加载它并执行它的代码。在这里,socket io 客户端需要找到后端的确切地址。例如,如果我们将其保留为 localhost,当我们从服务器下载应用程序后,它会尝试连接到 localhost,但它不会在本地找到后端应用程序,因为它在您的服务器中。这就是为什么您需要将 ip 或域而不是 localhost 作为后端地址。

    【讨论】:

    • 当然可以,但是如果每次安装时服务器 ip 都应该改变,并且用户不应该改变源,怎么办?类星体中是否有类似 env 的东西来保存服务器 ip?
    • @Sergio 服务器 ip 应该是静态的。在客户端中,您需要输入域或服务器 ip。您不能拥有具有动态 ip 的服务器。当然,您可能有一个具有动态 ip 的域和第三方服务,该服务会在检测到 ip 更改后将 ip 更新为域,但这并不理想。
    • 为什么?这是一个自托管应用程序,而不是云服务。我应该知道用户如何配置他们的服务器吗?我希望 Quasar 或在客户端上执行的任何其他 Vue 框架至少在环境 var 或类似的东西中接收原始 ip。
    • 使用 js 框架制作的应用程序在客户端运行。在这种情况下,它们由服务器提供服务(服务器仅按原样提供捆绑包)。因此,当您的应用程序被浏览器下载并加载时,socket io 需要知道托管后端服务器的 ip 或域地址才能进行连接。 @塞尔吉奥
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 2018-05-31
    • 2012-02-20
    • 2022-01-11
    • 2017-09-20
    • 2021-01-25
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多