39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
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;
|
||
}
|