socketio 能和WEB服务共用同一个端口吗?

作者站长头像
站长
· 阅读数 6

现在还有人使用 socketio 吗?

之前web服务和socketio都是独立的,比如一个 80,一个9092现在的问题是客户环境只能开放 80 端口,这样导致socketio没法使用了。

对socketio我的了解比较粗浅一些,现在想要咨询的第一个问题是:socketio能否和WEB服务共用同一个端口?

注意问的是 socketio, 不是websocket

socketio的官网地址:https://socket.io/zh-CN/

回复
1个回答
avatar
test
2024-06-27

这种情况应该使用反向代理会比较简单。

之前web服务和socketio都是独立的,比如一个 80,一个9092

这里我的理解是,80端口是一个程序,可能提供了web或者api接口,然后9092端口使用了socketio实现了一个长链接的服务。原来客户端上连接socketio的时候直接通过9092端口去访问的,但是现在只能对外暴露一个80端口了,所以原来的两个服务需要共用一个80端口。

官方文档上也有关于反向代理的描述:https://socket.io/zh-CN/docs/v4/reverse-proxy/

用nginx举例子,设置一个规则把/socket.io/开头的请求代理到原来的9092端口,其他路径的请求转发到原来的80端口的程序就可以了。

socketio它只是websoket和http的封装吧,处理这个和 websocket/http 是一样的吧,没什么区别。

可以参考原来的官网的配置文件,大概的配置是这样的:

http {
  server {
    listen 80;
    root /var/www/html;

    location / {  #这里是默认的,没有匹配上/socket.io/的都使用这个后端,转发到这里
      proxy_pass http://localhost:9091;
    }

    location /socket.io/ {   #这里匹配socketio的请求,转发给9092。
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;

      proxy_pass http://localhost:9092;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容