【问题标题】:electron/socket.io client - python-socketio/aiohttp server // fail to connectelectron/socket.io 客户端 - python-socketio/aiohttp 服务器 // 连接失败
【发布时间】:2019-12-09 14:46:42
【问题描述】:

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

当我现在从电子/节点运行它时,我得到与最初相同的错误加上一个关键错误:

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

请帮我堆人。

【问题讨论】:

    标签: javascript python websocket electron aiohttp


    【解决方案1】:

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

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

    但是,仅仅pip install python-socketio 还是不够的 您必须手动安装 python-enginio 的主分支,因为有 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='*')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 2011-06-30
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多