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

Sat*_*amo 3 sockets node.js 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`)
})
Run Code Online (Sandbox Code Playgroud)

对于websocket和express服务器使用相同的端口是安全/健康的做法.它会引起任何问题吗?

jfr*_*d00 7

对于websocket和express服务器使用相同的端口是安全/健康的做法.

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

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

它会引起任何问题吗?

没有.

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