一个应用程序和一个服务器可以提供websockets和http流量吗?



这是可能的吗?有可能在Rack之上的Ruby中做这样的事情吗?我看到有websocket -rack,但据我所知,这只是一个机架模块,只服务websocket流量,而不是http也。

所以基本上,正如问题所述,是否有可能在同一端口上使用一台服务器来服务这两种协议,而不是像Faye, websockets-rack或em-websockets这样的东西?

Websockets只是HTTP(s)的协议内升级,所以它们不是普通的TCP socket,而是重用现有的HTTP(s)连接(因此使用相同的端口)。因此,理论上它应该可以工作,而且据我所知,它可以与Perl Mojolicious框架一起工作。但是我不知道它是否工作ruby/rack。

简短的回答是- (AFAIK)没有。

目前,ruby HTTP服务器(如rails或sinatra)和websocket服务器是互斥的。

说完之后,你可以使用第三方来模仿。特别是Ngnix。使用Nginx,您可以侦听单个端口,但是,根据路径,决定是否要将请求分派给HTTP服务器或Websocket服务器。

例如,HTTP服务器在端口3000上运行,Websocket服务器在端口3020上运行,然后像这样配置nginx.conf:

upstream http_app {
  server 127.0.0.1:3000;
}
upstream websocket_app {
  server 127.0.0.1:3020;
}
server {
  listen   80;
  server_name .example.com;
  access_log /var/www/myapp.example.com/log/access.log;
  error_log  /var/www/myapp.example.com/log/error.log;
  root     /var/www/myapp.example.com;
  index    index.html;
  location /web {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_host;
    proxy_redirect  off;
    proxy_pass http://http_app;
  }
  location /socket {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_host;
    proxy_redirect  off;
    proxy_pass http://websocket_app;
  }
}

现在任何对http://www.example.com/web/...的请求都将到达HTTP服务器,任何对http://www.example.com/socket的请求都将到达Websocket服务器。

相关内容

  • 没有找到相关文章

最新更新