electronic / socket.io客户端-python-socketio / aiohttp服务器//连接失败

时间:2019-08-01 04:00:40

标签: javascript python websocket electron aiohttp

此websocket连接失败。有趣的是,这是几天前的事情。我将电子从6降级到5.0.6,但这没有帮助。

enter image description here enter image description here

服务器

from aiohttp import web
import socketio


app = web.Application()
sio = socketio.AsyncServer()
# or sio = socketio.AsyncServer(cors_allowed_origins='*')
sio.attach(app)

@sio.on('connect')
async def user_connected(sid, arg):
    print(sid)
    print(arg)

if __name__ == '__main__':
    web.run_app(app)

客户端(也已通过纯节点测试)

const con = 'http://0.0.0.0:8080';
const socket = require('socket.io-client').connect(con);

socket.on('connect', (e) => console.log(e));

在浏览器中尝试时,出现cors错误。因此,我允许使用cors使其起作用

sio = socketio.AsyncServer(cors_allowed_origins='*')

当我现在从电子/节点运行时,遇到与最初相同的错误以及一个关键错误: enter image description here

由于它以前可以工作,现在它不能在两台不同的机器上运行,并且只有一个最小的示例项目,所以我不知道是什么原因导致了这一切。

请帮助我叠堆人。

1 个答案:

答案 0 :(得分:0)

在Twitter上与Miguel Grinberg聊天后,我了解了如何进行设置。有几件事。首先,默认情况下4.3引入了CORS限制。由于节点不是浏览器,因此来自节点客户端的CORS标头存在一个错误。现在已经解决了。

但是,仅pip install python-socketio还是不够的 您必须手动安装python-enginio的master分支,因为存在CORS标头修复程序。

我的Pipfile看起来像这样:

[packages]
aiohttp = "*"
aiohttp-cors = "*"
python-enginio = {git = "https://github.com/miguelgrinberg/python-engineio/",ref = "master"}
python-socketio = "*"

别忘了现在允许CORS在服务器端使用。

sio = socketio.AsyncServer(cors_allowed_origins='*')