Commit e77ed6588324c6d5c0943f335aecbd53e1d3fb15

Authored by zhangzzzz
1 parent 45124c41

更新五彩ws连接处理;

src/mes/indexMes/index.js
... ... @@ -334,26 +334,54 @@ const useIndexMesEvent = props => {
334 334 [currentContent, sModelsId, sModelType]
335 335 );
336 336  
  337 + const { webSocket: ws } = props.app;
  338 + const { url } = ws || {};
  339 + const wsRef = useRef(ws);
  340 + useEffect(() => {
  341 + if (url) {
  342 + wsRef.current = ws;
  343 + }
  344 + }, [url]);
  345 +
337 346 useEffect(() => {
338 347 const connectWs = () => {
339   - if (
340   - props.app.webSocket === null ||
341   - props.app.webSocket?.readyState !== WebSocket.OPEN
342   - ) {
343   - console.log("================webSocket连接======================");
  348 + if (!wsRef.current) {
  349 + console.log("================webSocket不存在,创建webSocket连接======================");
344 350 props.dispatch({
345 351 type: "app/createWebSocket",
346 352 payload: { reStart: true, dispatch: props.dispatch }
347 353 });
  354 + return;
348 355 }
  356 + if (wsRef.current.readyState !== WebSocket.OPEN) return;
  357 + const message = {
  358 + connectTest: 'test',
  359 + key: 'test',
  360 + flag: 'test',
  361 + msg: 'test',
  362 + sId: 'test',
  363 + showType: 'test',
  364 + sendFrom: props.app.userinfo.sId,
  365 + };
  366 + wsRef.current.send(JSON.stringify(message));
  367 + window.wsTimer = setTimeout(() => {
  368 + console.log("================未收到Test返回消息,webSocket重新连接======================");
  369 + props.dispatch({
  370 + type: "app/createWebSocket",
  371 + payload: { reStart: true, dispatch: props.dispatch }
  372 + });
  373 + }, 3000);
349 374 };
350 375  
351 376 connectWs();
352 377 const timer = setInterval(() => {
353 378 connectWs();
354   - }, 50000);
  379 + }, 20000);
355 380  
356   - return () => clearInterval(timer);
  381 + return () => {
  382 + clearInterval(timer);
  383 + clearTimeout(window.wsTimer);
  384 + }
357 385 }, []);
358 386  
359 387 useEffect(() => {
... ...
src/models/app.js
... ... @@ -8,7 +8,7 @@ import { Toast } from 'antd-mobile';
8 8 import * as commonFunc from '../components/Common/commonFunc';/* 通用单据方法 */
9 9  
10 10 if (location.pathname === '/' || location.pathname === '/login') {
11   - localStorage.clear();
  11 + // localStorage.clear();
12 12 }
13 13  
14 14 export default {
... ... @@ -575,14 +575,14 @@ export default {
575 575 if (userinfo.sUserLoginType) {
576 576 url = `${config.ws_host}websocket/${userinfo.sId}?sLoginType=${userinfo.sUserLoginType}`;
577 577 }
578   - if (reStart) {
  578 + if (reStart || true) {
579 579 // const webSocket = yield select(state => state.app.webSocket);
580 580 // if (webSocket === null) {
581 581 // return null;
582 582 // }
583 583 url = `${config.ws_host}websocket/${userinfo.sId}?reStart=true`;
584 584 if (userinfo.sUserLoginType) {
585   - url = `${config.ws_host}websocket/${userinfo.sId}?reStart=true&sLoginType=${userinfo.sUserLoginType}`;
  585 + url = `${config.ws_host}websocket/${userinfo.sId}?reStart=true&createTime=${new Date().getTime()}&sLoginType=${userinfo.sUserLoginType}`;
586 586 }
587 587 }
588 588 const reset = (ws, config1) => {
... ... @@ -596,13 +596,23 @@ export default {
596 596 ws.send(JSON.stringify(message));
597 597 }, config1.timeoutServer);
598 598 };
  599 + const oldWebSocket = yield select(state => state.app.webSocket);
599 600 const ws = new WebSocket(url);
600 601 ws.onopen = function (e) {
601 602 console.log('连接上 webscoket 服务端了', e);
602 603 start(ws, config);
  604 + if (oldWebSocket && oldWebSocket !== ws) {
  605 + try {
  606 + oldWebSocket.close();
  607 + console.log('================已关闭旧的WebSocket连接======================');
  608 + } catch (error) {
  609 + console.log('================关闭旧WebSocket连接时出错======================', error);
  610 + }
  611 + }
603 612 };
604 613 // 全局通用的自定义onmessage的方法
605 614 ws.homeAction = (msg) => {
  615 + clearTimeout(window.wsTimer);
606 616 const rtmsg = JSON.parse(msg.data);
607 617 if (false && rtmsg.action === 'showImg' && location.pathname.indexOf('/indexOee') < 0) {
608 618 const msgData = JSON.parse(msg.data);
... ...