electron/socket.io client - python-socketio/aiohttp server // 连接失败

electron/socket.io client - python-socketio/aiohttp server // fail to connect

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

服务器

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='*')

当我现在从 electron/node 运行 执行此操作时,我得到了与最初相同的错误加上一个关键错误:

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

请帮我叠人

2021:请注意,您现在可以从 pypi 再次安装。您仍然需要允许 cors。

在 Twitter 上与 Miguel Grinberg 聊天后,我找到了设置方法。有几件事。 First 4.3 默认引入了 CORS 限制。节点客户端的 CORS headers 存在错误,因为节点不是浏览器。现在已经修复了。

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

我的 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='*')