node.js - 我的 ExpressJS 网站和 socket.io 端口可以使用相同的端口吗?

标签 node.js sockets express socket.io

我一直在编写使用 socket.io 进行实时通信的 ExpressJS 网站,并且我总是使用相同的端口

const request = require('request')
const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = require('socket.io')(server)
    server.listen(3000, () => {
  console.log(`Server started: http://localhost:3000`)
})

为 websocket 和 express 服务器使用相同的端口是否安全/健康?会不会有什么问题?

最佳答案

Is it safe / a healthy practice to use the same port for both the websocket and the express server.

很安全。为您的 Express 服务器和 socket.io 连接使用相同的端口是正常和预期的情况。无论如何,所有 socket.io 连接都以 http 请求开始,因此 socket.io 只是 Hook 您现有的 Web 服务器并查找特定类型的传入请求以打开 socket.io 连接并处理该特定请求。所有其他请求都由您的 Express 服务器正常处理。

webSocket 协议(protocol)(socket.io 使用)是专门为此设计的,这样做是为了允许这样做,因为在某些环境(如安全严格的公司环境)中,端口 80 以外的端口不能用于网络流量。这样,webSockets 就可以在端口 80 上运行,而无需为它们创建一个全新的主机和 DNS 名称。他们可以使用与您的网络服务器相同的服务器。

Will it cause any problems?

没有。

在大规模环境中,可能存在针对服务器工作负载的不同部分使用单独主机或单独服务器进程的规模原因,因此可能需要将 socket.io 连接与不同主机上的常规 Web 请求分开。这仍然可以通过使用像 nginx 这样的代理来使用相同的端口 80 来完成,它可以将不同类型的请求定向到不同的主机或不同的服务器进程。但是,对于不需要这种类型的缩放的情况,对 Express 和 socket.io 连接使用相同的 Web 服务器没有任何缺点。

关于node.js - 我的 ExpressJS 网站和 socket.io 端口可以使用相同的端口吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931031/

相关文章:

node.js - 应用程序使用(验证器()); ^ 类型错误 : validator is not a function

python - 为什么这个套接字连接只允许1次发送和接收?

java - 使用套接字将对象从android发送到java(Hibernate类)

javascript - Node gm 流上出现错误

node.js - 如何让 NodeJS 服务器理解 es6 导入和导出?

javascript - 在静态 json 文件上的 Node js 上使用 getJSON 时不支持获取协议(protocol)

javascript - 我应该将服务器端监听器放在 io 或 socket.io 的套接字上吗?

perl - 无法通过 perl 套接字发送流水线 http 请求

javascript - 如何在 JavaScript 文件中嵌入 CSRF token ?

node.js - bodyParser 已弃用 express 4