Мы работаем над проектом чата с использованием RubyOnRails. Приложение, которое мы разработали, работает на местном без каких-либо проблем. Однако выдает ошибку при попытке подключить веб-сокет извне. Мы требуем использовать эти приложения чата apis из Android приложения.
Мы используем следующие технологии / фреймворки
- Rails 5.0.0
- Ruby 2.2.2
- Экшн-кабель
- Пассажир
- Nginx
- Redis
/ etc / nginx / sites-enabled / chatroom_demo
server {
listen 80 default_server;
server_name xx.xxx.xxx.xxx;
passenger_enabled on;
passenger_app_env production;
root /home/projects/chatroom_demo/public;
location /cable {
passenger_app_group_name chatroom_demo_action_cable;
passenger_force_max_concurrent_requests_per_process 0;
proxy_pass http://xx.xxx.xxx.xxx;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
/ etc / nginx / nginx .conf
user www-data;
worker_processes auto;
worker_rlimit_nofile 16384;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 20000;
# multi_accept on;
}
config / cable.yml
production:
adapter: redis
url: redis://localhost:6379
config / сред /production.rb
config.action_cable.url = [/ws:\/\/*/, /wss:\/\/*/]
config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/]
На стороне клиента, к которому мы подключаемся, используя следующий код:
let socket = new WebSocket("ws://XX.XXX.XXX.XXX/cable");
socket.onopen = function(e) {
alert("[open] Connection established");
};
socket.onerror = function(error) {
alert(`[error] ${error.message}`);
};
Ошибка на стороне клиента: Undefined
Ошибка на стороне сервера:
* Ошибка сокета 32764 () (24: слишком много открытых файлов) при подключении к восходящему потоку, клиент: XX.XXX.XXX.XXX, сервер: XX.XXX.XXX.XXX, запрос: «GET / кабель HTTP /1.1 ", восходящий поток:" http://XX.XXX.XXX.XXX: 80 / кабель", хост:" XX.XXX.XXX.XXX "
Мы пробовали много разных способов исправить эта проблема, но не может найти никакого потенциального решения.