此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='*')
当我现在从电子/节点运行时,遇到与最初相同的错误以及一个关键错误:
由于它以前可以工作,现在它不能在两台不同的机器上运行,并且只有一个最小的示例项目,所以我不知道是什么原因导致了这一切。
请帮助我叠堆人。
答案 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='*')