我有一个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 的问题?
1条答案
按热度按时间33qvvth11#
好的,我想我想通了。原来端口5000似乎是MacOS用于对焦模式的。切换到端口5001解决了这个问题。