|
[插件开发]
socketManager里的重大BUG,经测试严重到无法使用的程度
[复制链接]
本帖最后由 偶&然 于 2015-9-20 15:25 编辑
在用socketManager做个小程序,服务器端用.NET搞定,如图,可以正常收发。
但是用APICloud写程序的时候遇到了问题,就是:
socketManager.write只能发送一次消息,发第二次消息服务器端怎么都是收不到...
不管我是把socketManager.write放在createSocket回调里面,还是单独把sid存起来用的时候在传过去,都不行,只能发一次消息............
请官方给出答案
代码贴上来
- apiready = function () {
-
-
- socketManager = api.require('socketManager');
- createSocket();
- setInterval("TCPLINE();", 5000);
- }
-
- //定义TCP连接函数
- function createSocket() {
- socketManager.createSocket({
- host: '127.0.0.1',
- port: 1024
- }, function (ret, err) {
- if (ret) {
- var state = ret.state;
- sid = ret.sid
- var data = ret.data;
- var stateStr = '';
- if (101 === state) {
- //stateStr = "创建成功";
- } else if (102 === state) {
- var sid = ret.sid
- $api.setStorage('sid',sid );//把SID储存在本地
- var u = $api.getStorage('u');
- var str = 'Login ' + sid + ' ' + Math.random() + '\r\n';
-
- socketManager.write({
- sid: sid, //由createSocket方法获取得到
- data: str + '第1次发....'
- });
-
- socketManager.write({
- sid: sid, //由createSocket方法获取得到
- data: str + '第2次发...'
- });
-
-
- } else if (103 === state) {
- //stateStr = "收到消息";
- //api.alert({msg:data});
- api.toast({msg:data,duration:1000,location:'middle'});
- _msg_dingdan();
-
- } else if (201 === state) {
- window.setTimeout(_showMsg(ip, port), 60000);
- //stateStr = "创建失败";
- } else if (202 === state) {
- window.setTimeout(_showMsg(ip, port), 60000);
- //stateStr = "连接失败";
- } else if (203 === state) {
- window.setTimeout(_showMsg(ip, port), 60000);
- stateStr = "网络连接断开状态";
- api.toast({msg:stateStr,duration:1000,location:'middle'});
- } else if (204 === state) {
- //window.setTimeout(_showMsg(ip,port),60000);
- stateStr = "服务器网络断开状态";
- api.toast({msg:stateStr,duration:1000,location:'middle'});
- } else if (205 === state) {
- window.setTimeout(_showMsg(ip, port), 60000);
- //stateStr = "发生未知错误";
- }
- var msg = 'sid: ' + sid + '\nstate: ' + stateStr + '\ndata: ' + (data ? data : '');
- //api.alert({msg:msg});
- }
- else {
- window.setTimeout(_showMsg(ip, port), 60000);
- }
- });
-
- }
- //TCP保持在线心跳包
- function TCPLINE() {
- var sid = $api.getStorage('sid');//读取储存在本地的SID
- var str = 'Login ' + sid + ' ' + Math.random() + '\r\n';
- socketManager.write({
- sid: sid, //由createSocket方法获取得到
- data: str
- }, function(ret, err){
- if(ret.status){
- sid = ret.sid
- $api.setStorage('sid',sid );//把SID储存在本地
- api.toast({msg:ret.data,duration:5000,location:'middle'});
- //_msg_dingdan();
- }else{
- api.alert({msg:'error'});
- }
- });
- }
- function TCPclose(){
- var sid = $api.getStorage('sid');//读取储存在本地的SID
- socketManager.closeSocket({
- sid: sid //由createSocket方法获取得到
- }, function(ret, err){
- if(ret.status){
- api.alert({msg:'关闭成功'});
- }else{
- api.alert({msg:'error'});
- }
- });
- }
- }
复制代码
|
|