Javascript Flask SocketIO在部署时拒绝连接
我目前正在开发一个包含聊天功能的社交网络webapp,当我在localhost上时,聊天效果很好。 我遇到的问题是,当我尝试将客户端连接到(托管的)服务器时,从SocketIO得到一个错误 错误如下:GET net::ERR\u连接被拒绝 很长一段时间以来,我一直尝试在网上用随机解决方案来解决这个问题,但我不能完全理解这一点 run.py文件:Javascript Flask SocketIO在部署时拒绝连接,javascript,jquery,flask,socket.io,flask-socketio,Javascript,Jquery,Flask,Socket.io,Flask Socketio,我目前正在开发一个包含聊天功能的社交网络webapp,当我在localhost上时,聊天效果很好。 我遇到的问题是,当我尝试将客户端连接到(托管的)服务器时,从SocketIO得到一个错误 错误如下:GET net::ERR\u连接被拒绝 很长一段时间以来,我一直尝试在网上用随机解决方案来解决这个问题,但我不能完全理解这一点 run.py文件: from random import app, socketio if __name__ == '__main__': socketio.ru
from random import app, socketio
if __name__ == '__main__':
socketio.run(app, debug=True)
在my routes.py中,我的连接事件如下所示:
@socketio.on('user_con')
def receive_connection(data):
# join the desired channel
join_room(data['channel'])
print('User ' + str(data['user']) + ' successfully joined channel : ' + str(data['channel']))
//Connect the socket to our server
var socket = io.connect('http://127.0.0.1:5000');
socket.on('connect', function() {
var connection_data = {
user : '{{ current_user.id }}',
channel : '{{ channel.name }}'
}
//send the connection data
socket.emit('user_con', connection_data);
});
客户端的连接方式如下:
@socketio.on('user_con')
def receive_connection(data):
# join the desired channel
join_room(data['channel'])
print('User ' + str(data['user']) + ' successfully joined channel : ' + str(data['channel']))
//Connect the socket to our server
var socket = io.connect('http://127.0.0.1:5000');
socket.on('connect', function() {
var connection_data = {
user : '{{ current_user.id }}',
channel : '{{ channel.name }}'
}
//send the connection data
socket.emit('user_con', connection_data);
});
请注意,该代码在本地计算机上运行良好,但未部署。所有内容都托管在linux服务器上
我非常感谢你的帮助谢谢。
EDIT2:这是我们的nginx文件
server {
server_name #censored#;
location /static {
alias /home/admin/Prototyp_1/#censored#/static;
}
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
proxy_redirect off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/#censored#/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/#censored#/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = #censored#) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = #censored#) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name #censored#;
return 404; # managed by Certbot
}
编辑3:我们在代码中添加了以下内容
location /socket.io {
include proxy_params;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://127.0.0.1:5000/socket.io;
}
有趣的是,当我们将html中的端口更改为5000时,错误是“连接被拒绝”,当它为8000时,错误是“不允许原始端口”通常,公共端口是8080美元或80美元。使用8000的逻辑是什么?我想我的意思不是flask在8000上运行,而是gunicorn,因为这是gunicorn的默认端口?您看过关于如何配置nginx的Flask SocketIO文档了吗。在nginx中,默认值为80端口,其中location server_name_uu是上面为url定义的变量,location/socket.io在此还应提供currect路径