你可能会说:
- “localhost 后面那个冒号加数字是什么?”
- “启动时报错 address already in use,是什么被占了?”
它是什么
一台电脑可以同时跑很多个服务。地址(比如 localhost)只能把请求送到这台电脑,端口号(比如 5199、8787)决定交给哪个程序。网址里没写端口时,http 默认用 80,https 默认用 443。
一个端口同一时间只能被一个程序占用,第二个程序再来就会报 address already in use。更隐蔽的情况是:旧程序一直没退出,占着那个端口;你以为在和新程序说话,回答你的其实是它。
遇到"改了没生效",先确认那个端口上到底是谁:macOS 和 Linux 上运行 lsof -iTCP:端口号 -sTCP:LISTEN,就能查到占着它的进程。
打个比方
像写字楼的房间号:地址把你带到楼下,房间号决定你敲的是哪家公司的门。一个房间同一时间只能租给一家。
在这个网站里
兄弟项目 E2E Review 在本地跑两个服务:前端开发服务器在 5199 端口,它把所有 /api 请求转给 8787 端口。第 2 课的事故里,8787 被一个两个月前启动的旧进程占着,前端问的一直是它。
容易搞混的地方
常见误解
端口被占了,换一个端口启动就好
正确理解
先查清是谁占着。换端口只是绕开了它:旧进程还在,其他指向原端口的配置也还在问它。
你可以这样告诉 AI
复制下面这段,贴给你的 AI
列出这个项目本地会启动哪些服务、各占哪个端口、谁把请求转给谁。如果端口被占用,先告诉我占着它的是哪个进程、什么时候从哪个目录启动的,不要直接换一个端口绕过去。
接下来去哪
先知道
- 本地环境——你自己电脑上跑起来的那一份网站,只有你能访问,和线上那份是两套各自运行的东西。
接着看
- 进程——一个正在运行的程序。它把代码和数据读进内存后自己运行,和磁盘上的文件已经没有关系。
在这些课里出现
相关的真实事故