import { io } from 'socket.io-client'; import { socketio_port } from '../../../../sites/common_site_config.json'; import { getCachedResource, getCachedListResource } from 'jingrow-ui'; export function initSocket() { let host = window.location.hostname; let siteName = window.site_name; let protocol = window.location.protocol.slice(0, -1); // 移除末尾的 ':' // 开发模式:使用 socketio_port(有端口或明确是开发环境) // 生产模式:使用当前页面的协议和域名,不指定端口(通过 nginx 反向代理) let port = ''; if (window.location.port) { // 开发模式或有明确端口,使用 socketio_port port = `:${socketio_port}`; } // 生产模式(HTTPS 443 或 HTTP 80):不指定端口,使用当前页面的协议和域名 let url = `${protocol}://${host}${port}/${siteName}`; let socket = io(url, { withCredentials: true, reconnectionAttempts: 5, secure: protocol === 'https' }); socket.on('refetch_resource', data => { if (data.cache_key) { let resource = getCachedResource(data.cache_key) || getCachedListResource(data.cache_key); if (resource) { resource.reload(); } } }); return socket; }