此websocket连接失败。有趣的是,这是几天前的工作。我将 Electron 从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/节点运行此命令时,会得到与最初相同的错误以及一个关键错误:
由于它以前运行过,现在它不在两台不同的机器上运行,并且仅带有一个最小的示例项目,所以我不知道是什么原因导致了所有这些。
请帮我叠人。
最佳答案
在Twitter上与Miguel Grinberg聊天之后,我了解了如何进行设置。有几件事。首先,默认情况下4.3引入了CORS限制。由于节点不是浏览器,因此来自节点客户端的CORS header 存在一个错误。现在已经解决了。
但是,仅仅使用pip install python-socketio
还是不够的
您必须手动安装python-enginio
的master分支,因为存在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='*')
关于javascript - electronic/socket.io客户端-python-socketio/aiohttp服务器//连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57301646/