electron socket.io 首先启动服务器,否则电子应用程序中的www.example.com客户端不会连接到flask服务器

eh57zj3b  于 2022-12-08  发布在  Electron
关注(0)|答案(1)|浏览(259)

我有一个socket.io客户端,我在一个电子应用程序中运行。这个应用程序连接到一个运行flask_socketio的flask服务器。这一切都很好,除非客户端在服务器之前启动,在这种情况下,套接字永远不会连接。
下面是客户端代码:

export function useSocket(onProgress: (progress: number) => void) {
  const socket = useRef<Socket>();

  const cleanup = useCallback(() => {
    socket.current?.off('connect');
    socket.current?.off('connect_error');
    socket.current?.off('error');
    socket.current?.off(SocketMessage.PROGRESS);
    socket.current?.disconnect();
  }, []);

  const createSocket = useCallback(() => {
    socket.current = io('http://127.0.0.1:5000', { forceNew: true });
    socket.current.on('connect', () => console.log('Connected to Flask.'));
    socket.current.on('connect_error', (err: Error) => {
      console.error('CONNECTION ERROR', err);
      cleanup();
      setTimeout(() => {
        createSocket();
      }, 1000);
    });
    socket.current.on('error', (err: Error) => console.error(err));
    socket.current.on(SocketMessage.PROGRESS, onProgress);
  }, []);

  useEffect(() => {
    createSocket();
    return cleanup;
  }, [cleanup]);
}

在 flask 里,没有什么特别有趣的事情发生...

socketio = SocketIO(
    app, cors_allowed_origins="*", async_mode="eventlet", engineio_logger=True
)
socketio.run(app, port=5000, debug=True)

如果我先启动服务器,然后运行客户端,一切都按预期运行。如果我先启动客户端,然后启动服务器,我会不断看到CORS错误:

app_window:1 Access to XMLHttpRequest at 'http://127.0.0.1:5000/socket.io/?EIO=4&transport=polling&t=OCf9ogr' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

怎么回事?这是socket.io的问题,电子缓存的问题,还是 flask 的问题?

33qvvth1

33qvvth11#

好的,我想我想通了。原来端口5000似乎是MacOS用于对焦模式的。切换到端口5001解决了这个问题。

相关问题