Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 一个应用程序和一台服务器是否可以提供WebSocket和http流量?_Ruby On Rails_Ruby_Sockets_Websocket_Rack - Fatal编程技术网

Ruby on rails 一个应用程序和一台服务器是否可以提供WebSocket和http流量?

Ruby on rails 一个应用程序和一台服务器是否可以提供WebSocket和http流量?,ruby-on-rails,ruby,sockets,websocket,rack,Ruby On Rails,Ruby,Sockets,Websocket,Rack,这有可能吗?在Ruby-on-on-on-on-of-Rack中可以做这样的事情吗?我见过websocket机架,但据我所知,这只是一个机架模块,仅用于websocket流量,不用于http 因此,基本上,如问题所述,是否有可能在同一端口上使用一台服务器来服务两个协议,而不是触发Faye、websockets rack或em websockets之类的东西?简短的回答是-(AFAIK)否 目前,ruby HTTP服务器(如rails或sinatra)和websocket服务器是互斥的 说了这些之

这有可能吗?在Ruby-on-on-on-on-of-Rack中可以做这样的事情吗?我见过websocket机架,但据我所知,这只是一个机架模块,仅用于websocket流量,不用于http

因此,基本上,如问题所述,是否有可能在同一端口上使用一台服务器来服务两个协议,而不是触发Faye、websockets rack或em websockets之类的东西?

简短的回答是-(AFAIK)否

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

说了这些之后,您可以使用第三方来模仿。明确地使用
Nginx
您可以侦听单个端口,但根据路径决定是将请求分派到HTTP服务器还是Websocket服务器

例如,您可以在端口3000上运行HTTP服务器,在端口3020上运行Websocket服务器,然后像这样配置
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服务器。

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

要求是一台服务器,还是单端口?它应该是一个端口,所以基本上我可以启动一个ruby应用程序,在同一个端口上同时提供两个服务器这是一个选项吗?这需要一些较低级别的黑客,不是吗?我的问题实际上是,是否有可能在一个端口上有一台服务器将所有流量路由到应用程序,然后应用程序可以决定它将如何处理它。我不确定这是否可能,一台服务器同时提供http和ws。有点困惑,对不起。-1:如果websocket只是http的一个扩展,websocket服务器和http怎么可能是互斥的?唯一能阻止websocket服务器成为http服务器的东西(反之亦然)技术还不成熟。另外,你自相矛盾,因为你给出了一个nginx的例子,它可以同时处理http和WebSocket。我在回答中含糊其辞,我说的是ruby解决方案(rails和sinatra),并使用nginx的power作为代理来服务两个当前不兼容的容器。我添加了一个说明,说明我在谈论ruby。公平地说,我删除了-1。