root 1 vuosi sitten
vanhempi
commit
f121d787f9
2 muutettua tiedostoa jossa 36 lisäystä ja 18 poistoa
  1. 32 13
      js/Office/Poll.js
  2. 4 5
      node/message.js

+ 32 - 13
js/Office/Poll.js

@@ -22,33 +22,52 @@ U.MD.O.P.connect = function () {
     }
 };
 
+
+/*
+* 数据处理
+*/
+U.MD.O.P.dataAsyn = function () {
+
+
+}
+
 /*
 * 发送请求进入轮训
 */
 U.MD.O.P.polling = function (params) {
     params = params || ["polling", US.userInfo.userid, US.pageId, US.systemId]
     var start = 0;
-    var time = null;
+    var delimiter = "\r\n"
+    var end = 0;
+    var text = "";
     var xhr = new XMLHttpRequest();
     var data = "";
     xhr.open("POST", US.SCOKET, true);
     xhr.onreadystatechange = function () {
         //获取数据
         if (xhr.readyState == 3 && xhr.status == 200) {
-            clearTimeout(time);
-            var len = xhr.responseText.length;
-            data += xhr.responseText.substring(start, len);
-            start = len;
-            time = setTimeout(function () {
-                clearTimeout(time);
-                try {
-                    U.MD.O.P.pollingAsyn({ value: JSON.parse(data) })
+            text = xhr.responseText;
+            var istrue = true;
+            while (start < text.length && istrue) {
+                end = text.indexOf(delimiter, start);//获取数据的是否已经结束
+                if (end) {
+                    data += text.substring(start, end);
+                    start = end + delimiter.length;
+                    try {
+                        U.MD.O.P.pollingAsyn({ value: JSON.parse(data) })
+                    }
+                    catch (e) {
+                        console.log(e);
+                    }
+                    data = "";
                 }
-                catch (e) {
-                    console.log(e);
+                else {
+                    istrue = false;
                 }
-                data = "";
-            }, 20);
+            }
+            //clearTimeout(time);
+
+            //只有抓取到数据结束后才执行,防止网络太卡或者数据太大的不完整的获取导致后续无法执行
 
         }
         //结束重连

+ 4 - 5
node/message.js

@@ -485,7 +485,7 @@ us.unifyDispose = function (req, res, cb) {
     res.setTimeout(30000, function () {
         try {
             //console.log("响应超时.");
-            //res.end("false"); //返回值
+            res.end(""); //返回值
         }
         catch (e) {
             console.error('process error is:', e.message);
@@ -496,7 +496,6 @@ us.unifyDispose = function (req, res, cb) {
     req.on("error", function (e) {
         try {
             console.log(e);
-            //res.end("false");
         }
         catch (e) {
             console.error('process error is:', e.message);
@@ -640,7 +639,7 @@ us.polling = function (requset, response, userid, pageid, type) {
         if (_userarray[pageid]) {
             _userarray[pageid].response = response;
             if (_messagearray && _messagearray.message.length > 0) {
-                response.write(JSON.stringify(_messagearray.message));
+                response.write(JSON.stringify(JSON.stringify(_messagearray.message)) + "\r\n");
                 _messagearray.message = [];
             }
             else {
@@ -1534,7 +1533,7 @@ us.broadcast = function (messageinfo, pageid, type) {
         _issend, // 是否发送
         _userconnect = us.connect; //用户连接池
     for (i in messageinfo) {
-        _messageinfo = messageinfo[i]; //记录消息消息
+        _messageinfo = messageinfo[i]; //记录消息消息b
         _users = us[type][i] ? us[type][i].user : {}; //记录用户集合
         for (j in _users) { //循环处理每个用户处理 给每个用户集合下的用户发送消息
             _pageids = _users[j]; //记录当前用户在每个端登录的页面唯一识别ID
@@ -1544,7 +1543,7 @@ us.broadcast = function (messageinfo, pageid, type) {
                     try {
                         if (_userconnect[j] && _userconnect[j][_recievedpageid]) {
                             console.log(_recievedpageid);
-                            _issend = _userconnect[j][_recievedpageid].response.write(JSON.stringify(_messageinfo)); //发送消息
+                            _issend = _userconnect[j][_recievedpageid].response.write(JSON.stringify(JSON.stringify(_messageinfo)) + "\r\n"); //发送消息
                             //用户在轮询切换的时候的中间,会产生数据无法接受,这里是存储数据
                             if (!_issend) {
                                 us.offLineMessage[_recievedpageid].message.push(_messageinfo); //将消息加入用户离线消息中