【问题标题】:Electron won't spawn flask-socketio server: ERR_CONNECTION_REFUSEDElectron 不会生成 flask-socketio 服务器:ERR_CONNECTION_REFUSED
【发布时间】:2017-10-27 21:21:22
【问题描述】:

我大致遵循this 和this 将烧瓶服务器嵌入到电子项目中。如果我flask run 服务器然后electron .,则建立连接。但是,如果我在电子启动期间尝试初始化服务器,则服务器永远不会启动(或者我不太了解的东西)并且我继续得到 ERR_CONNECTION_REFUSED。我也尝试清除我的缓存和 DNS 刷新(认为问题可能是本地问题)。关于我可以在这里做什么的任何指示?

附:这是我第一次真正的 JS 冒险,我主要是一个 Python 人。抱歉语法错误。

更新:没有代表回复@Miguel,我使用conda env,是的,它在启动前被激活。此外,设置环境变量后,我已经使用python -m flask run、flask run 和python .\scripts\Backend\testFlask.py 成功启动了服务器。在 Electron 中生成任何这些方法都会导致相同的连接错误。

main.js

const electron = require('electron')
const {app, BrowserWindow, Menu, dialog} = require('electron')
const fs = require('fs')
const path = require('path')
const url = require('url')

let win
let server;
process.env.FLASK_APP = '.\\scripts\\Backend\\testFlask.py';
process.env.FLASK_DEBUG = 1;

module.exports = {
    openFile: function () {
        var files = dialog.showOpenDialog({
            properties: ['openFile']
        });

        if (!files) { return; }

        var file = files[0];
        console.log(typeof file)
        var content = fs.readFileSync(file).toString();

        win.webContents.send('fileOpener', file, content);
        console.log(content);
    }
};

function createWindow(){
    const {width, height} = electron.screen.getPrimaryDisplay().workAreaSize
    win = new BrowserWindow({
        width: width * (2/3),
        height: height * (9/10),
        show: false
        })

    win.loadURL(url.format({
        pathname: path.join(__dirname, 'index.html'),
        protocol: 'file',
        slashes: true
    }))

    win.once('ready-to-show', ()=> {
        win.show();
    })

    win.webContents.openDevTools()

    win.on('closed', () => {
        win = null;
    })
}

app.on('ready', function(){
    var script = path.join(__dirname, 'scripts', 'Backend', 'testFlask.py')
    server = require('child_process').spawn('python.exe', [script])
    server.stdout.on('data', (data) => {
        console.log(data.toString())
    })

    createWindow()
    const applicationMenu = require('./menu');
    Menu.setApplicationMenu(applicationMenu);
    })

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit()
    }
})

app.on('activate', () => {
    if (win == null) {
        createWindow();
        const applicationMenu = require('./menu');
        Menu.setApplicationMenu(applicationMenu);
    }
})

testFlask.py

from flask import Flask, request
from flask_socketio import SocketIO, send, emit

app = Flask(__name__)
socketio = SocketIO(app, async_mode='eventlet'test)

@app.route('/')
def welcome():
    print('Welcome')

@socketio.on('message')
def data_received(message):
    print(message)
    send(message)

@socketio.on('connect')
def connection():
    print('Echelon connection established')

if __name__ == '__main__':
    print("testing")
    socketio.run(app, port='8080', debug=True)

socketAPI.js

$(document).ready(function(){
    var socket = io.connect('http://localhost:8080/');
    socket.on('connect', function() {
        console.log(socket.connected) //make sure the connection is established
    });

    socket.on('message', function(message){
        console.log(message + ' received');
    });

    $('form#searchBarForm').submit(function(event) {
        console.log(event.target["0"].value + ' sent') //for debugging
        socket.send(event.target["0"].value);
        return false;
    });
})

【问题讨论】:

  • 你使用 virtualenv 吗?如果是,是否在您启动 JS 脚本时激活?您还说您使用flask run 手动启动Python 服务器,但使用来自JS 的python scripts/Backend/testFlask.py。从命令行执行此最后启动方法是否有效?或者反之亦然,如果你使用flask run,JS 启动会更好吗?
  • @Miguel,我更新了我的问题。然而,在周末感到沮丧并关闭我的电脑之后,它现在似乎可以连接......令人费解,但已修复(我猜)。

标签: python-3.x flask socket.io electron flask-socketio


【解决方案1】:

似乎硬重启我的电脑解决了这个问题。超出缓存和 DNS 的东西引起了问题。周末回来后,建立了稳定的连接。谢谢@Miguel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2021-08-24
    • 2021-03-25
    相关资源
    最近更新 更多