起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6405|回复: 17

[分享] 针对wex5流水线无人维护的问题

  [复制链接]

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
发表于 2022-4-3 16:11:27 | 显示全部楼层 |阅读模式
声明:我是wex5的老用户了。独立开发了几款app均已上线。由于wex5流水线已无团队维护。现在改投uniapp。wex5的优点,方便,直观,后端配置方便。对于开发经验不足的我,非常适合。
改投原因:我原先个人开发的app,前端+后端+即时通讯(直接用wex5的提供消息服务器,mqtt做IM)+直播,足足开发了9个月的时间。由于苹果版本下架(UIwebview的原因),wex5官方电话沟通后说wex5流水线已不再维护。导致我又花了1个月的时间修改ios的源码(替换UIwebView),还是由于替换后的种种兼容问题。未能修改上线。只能硬着头皮改投uniapp。重新学。但是发现他们的文档非常人性化,直接给连接。点击跳转到官方文档。还有各种插件。
提示:如果你用微信小程序的开发工具开发过小程序,那么uniapp就非常好上手。
我用来20天的时间,把安卓和苹果版本复写了一遍到uniapp。速度是非常快的。

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
 楼主| 发表于 2022-4-3 16:15:14 | 显示全部楼层
1.JPG
有不明白的地方,直接跳转到文档。非常便利。
2.JPG
文档说明,也很简洁,关键是,针对各种苹果审核的注意事项。都有详细说明。
回复 支持 反对

使用道具 举报

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
 楼主| 发表于 2022-4-3 16:26:16 | 显示全部楼层
IM即时通讯,可以用node架设mqtt的服务器,(不要用消息服务器的mqtt脚本了,小程序和uniapp不兼容。但是如果用了,网页版还是可以直接连接node的mqtt服务器。)
mqtt做即时通讯,思路:导入wex5的消息服务器里面的mqtt脚本。登录,订阅(以手机号订阅即可,自己订阅自己的,两个人聊天,就对方的手机号的订阅主题发消息就可以。群聊,在取名字的时候订阅名字。可以根据在线列表判断用户是否在线?如果不在线,推送消息到客户的手机端,这时候要对方手机的cid(个推))。
直播:uniapp,推流用live-pusher,没几行代码。一看就明白。都是中文的说明,服务端,node +mqtt+ngnix,就够了。手机端直接推流,拉流用video配置好src就可以了。也非常快,一个晚上就搞定了。
分享:uniapp提供了接口,配置一下,就可以了。也是几行代码搞定了。
支付:uniapp提供了统一的支付接口。也是非常方便。
回复 支持 反对

使用道具 举报

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
 楼主| 发表于 2022-4-3 16:30:51 | 显示全部楼层
mqtt,服务端代码。就几行。
node的脚本,跟前端非常配合,用的很舒服,比java方便多了。
//mqtt.js

var mosca = require('mosca'); //构建服务器  
var request = require('request');

var mysql = require('mysql');
var connection = initializeConnection({
  host: 'localhost',
  user: 'root',
  password: '111111111111111111',
  port: '3306',
  database: 'hbrely'//上文说的名字
});

// 此处配置mqtt的http客户端,尤为重要,http.port则为你HTTP访问端口,可以在网页上输入127.0.0.1:8888(端口),能请求成功则配置成功  
var MqttServer = new mosca.Server({  
    port: 8083,  
    http: {  
        port: 8090,  
        bundle: true,  
        static: './'  
      }  
});  
var clientList=[];
var pushData = {
  title: "eee",
  content:"bbb",
  cid:"d3bb266fc9c7bf5274fffef5508534bf",//个推的cid,有它就可以单独推送。实现离线消息
  //cid:"131a25fb6faa1d5af35c3f4510b8ed9f",
  payload: JSON.stringify({receiver:"18031151041",fName:"张磊",fImage:"u1.jpg"}),
};
  
//监听链接  
MqttServer.on("clientConnected", function(client) {  
    console.log("客户端上线", client.id,"时间:"+new Date().toLocaleString());  
/*
    var cli=clientList.indexOf(client.id);
    if(cli==-1)
    {
     clientList.push(client.id);
    }
*/
    console.log(clientList);

});  
//监听订阅
MqttServer.on("subscribed", function(client) {
console.log(client);
    console.log("app运行", client,"时间:"+new Date().toLocaleString());  

    var cli=clientList.indexOf(client);
    if(cli==-1)
    {
     clientList.push(client);
    }

    console.log(clientList);
});  

//监听链接  
MqttServer.on("clientDisconnected", function(client) {  
    console.log("客户端离线", client.id,"时间:"+new Date().toLocaleString());  

    var cli=clientList.indexOf(client.id);
    if(cli>-1)
    {
     clientList.splice(cli,1);
    }

    console.log(clientList);
});  
//监听订阅  
MqttServer.on("unsubscribed", function(client) {  
    console.log("客户端背后运行", client,"时间:"+new Date().toLocaleString());  

    var cli=clientList.indexOf(client);
    if(cli>-1)
    {
     clientList.splice(cli,1);
    }

    console.log(clientList);
});


//监听mqtt的主题消息  
MqttServer.on("published", function(packet, client) { //当客户端有连接的时候,发布主题消息  
   
    var topic = packet.topic;
  // console.log(client,":客户端");
     //console.log(packet,"消息体");
      if(client!=undefined)
      {

      
      var  message=JSON.parse(packet.payload.toString());
         console.log(message);
            saveMessage(message);
          if(message.type<10)
          {
         
             var callback={
                    id:message.id,
                    state:1,
                    type:-1
                  }

                  console.log((message.platform + message.from),"时间:"+new Date().toLocaleString());
                  MqttServer.publish({  
                      topic: (message.platform + message.from),  
                      payload: JSON.stringify(callback),
                  });
          }//通知类消息不做回执
        

          var index=clientList.indexOf("H5_"+topic);
        console.log(message,":消息");
          if(index>-1)
          {
              topic="H5_"+topic;
           
          }else
          {
              index=clientList.indexOf("App_"+topic);
              if(index>-1)
              {
                 topic="App_"+topic;

              }else
              {
                   pushData.title=message.name
                   pushData.content=message.message
                   pushData.cid=message.cid

                    push();
                    return;

              }
          }


                  //mqtt转发主题消息

                  MqttServer.publish({  
                      topic: topic,  
                      payload: packet.payload.toString(),
                  });  
      }else
      {
          /*
       pushData.title=message.name
       pushData.content=message.message
       pushData.cid=message.cid

        push();
        */
      }
   
  
  
});  
function saveMessage (data) {

  var addSql = 'INSERT Ignore INTO hb_im(fID,from_user,to_user,content,type,platform,cid,name,touxiang) VALUES(?,?,?,?,?,?,?,?,?)';
  var addSqlParams = [data.id,data.from,data.to,data.message,data.type,data.platform,data.cid,data.name,data.touxiang]; //这是想增加的数据
  connection.query(addSql, addSqlParams, function (err, res) { //询问访问数据库,也就是去嫩那个数据库
  if (err) { //失败就报个错
    console.log('[INSERT ERROR] - ', err.message);
   
  }
  console.log("数据库增的结果:");
  console.log(res);
});

}

function initializeConnection(config) {
    function addDisconnectHandler(connection) {
        connection.on("error", function (error) {
            if (error instanceof Error) {
                if (error.code === "PROTOCOL_CONNECTION_LOST") {
                    console.error(error.stack);
                    console.log("Lost connection. Reconnecting...");

                    initializeConnection(connection.config);
                } else if (error.fatal) {
                    throw error;
                }
            }
        });
    }

    var connection = mysql.createConnection(config);

    // Add handlers.
    addDisconnectHandler(connection);

    connection.connect();
    return connection;
}


function push()
{
    request({
          url: "https://www.hbrely.net/baas/Push/UniPush/push",
          method: "POST",
          json: true,
          headers: {
              "content-type": "application/json",
          },
          body: pushData
          }, function(error, response, body) {
         //    console.log(response.statusCode)
              if (!error && response.statusCode == 200) {
          //        console.log(body) // 请求成功的处理逻辑
              }
          });


}
MqttServer.on('ready', function() {  
    console.log("mqtt is running....");  
});
回复 支持 反对

使用道具 举报

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
 楼主| 发表于 2022-4-3 16:33:17 | 显示全部楼层
APP端的消息,登录,订阅,发送消息
var mqtt = require('mqtt/dist/mqtt.min.js')
var client = null;
const platform = uni.getSystemInfoSync().platform;
var MessageList=[];
var subscribe="";
var timeout;

function cid() {
        // #ifdef APP-PLUS
        //App端启动后,先拿到cid,存储到本地,
        //用户登录后,更新cid到服务器,

        plus.push.getClientInfoAsync((res) => {

                uni.setStorage({
                        key: "push_cid",
                        data: {
                                cid: res.clientid
                        },
                        success: (suc) => {
                                console.log(suc);

                        }
                })

        }, (err) => {
                console.log(err);
        })


        //#endif

        uni.getStorage({
                key: "dukon",
                success: (res) => {
                        var user = res.data;
                        IM_login(user.fPhoneNumber)
                        getApp().globalData.$from = user.fPhoneNumber;
                        getApp().globalData.$fID = user.fID;
                        getApp().globalData.$self_portrait = user.fImage;
                        getApp().globalData.$self_name = user.fName;
               
                        getApp().globalData.$cid = user.cid;
                },
                fail(res) {


                }
        })








}
function _subscribe()
{
                client.subscribe(subscribe, function(err) {
                        if (!err) {
                                uni.showToast({
                                        title: "订阅成功",
                                        duration: 2000,
                                        icon: "none"
                                })
                        } else {
                                console.log(err)
               
                        }
                })
       
       
}
function _unSubscribe()
{
       
        client.unsubscribe(subscribe,function(res){
                console.log(res)
                uni.showToast({
                        title: "取消订阅",
                        duration: 2000,
                        icon: "none"
                })
        })
}
function IM_login(cid) {

        var me = this;




        // #ifdef H5  
         subscribe = "H5_" + cid;
        let options = {
                clientId: "H5_" + cid,
                connectTimeout: 600000,
                clean: true
        }
        // 此处的端口为mqtt.js中的http端口,否则H5和手机连接不上mqtt服务器  
        client = mqtt.connect('ws://www.hbrely.net:8090/mqtt', options)

        // #endif

        // #ifdef MP-WEIXIN||APP-PLUS  
//        console.log("app登录");
         subscribe = "App_" + cid;
        let options = {
                clientId: "App_" + cid,
                connectTimeout: 600000,
                clean: true
        }
        // 此处需要改成你的主机ip,并保证测试手机跟你的电脑处于同一个局域网  
        client = mqtt.connect('wx://www.www.com:8090/mqtt', options)//你服务器的地址
        // #endif  
        client.on('connect', function(res) {
                        // #ifdef APP-PLUS
                        plus.nativeUI.toast("链接成功");
                        // #endif  
                        // #ifdef H5  
                        uni.showToast({
                                title: "链接成功",
                                duration: 2000,
                                icon: "none"
                        })
                        // #endif  
                        client.subscribe(subscribe, function(err) {
                                if (!err) {
                                        uni.showToast({
                                                title: "订阅成功",
                                                duration: 2000,
                                                icon: "none"
                                        })
                                } else {
                                        console.log(err)

                                }
                        })
                       
                })
        client.on('error', (e) => {
               
                                console.log('MQTT ,error=.',e);
                               
                        })
        client.on('close', (e) => {
                        console.log('MQTT connection closed, now exiting.');
                })
        client.on('reconnect', function(e) {
                        console.log("重连")
                })
       
        client.on('message', function(top, messaage) {
               
       
               
                        var data=JSON.parse(messaage.toString());
//                                console.log(data,":接受到的消息");
                if(data.type>0)
                {               
//                        console.log(data);
                        console.log('data.to='+data.to);
                        console.log('data.from='+data.from);
                                var content = {
                                        type: data.type,
                                        from:  data.from,//我 1
                                        to:  data.to,//发给谁 2
                                        message: data.message,
                                        touxiang:data.touxiang,
                                        name: data.name,
                                        time: data.time,
                                        cid: data.cid,
                                        state:data.state,//0=发送后,未回执,1=发送失败,2=发送后收到回执
                                        id:data.id,
                                        platform:data.platform,
                                };
                                //console.log(getApp().globalData.$url + "upload/data/portrait/" + getApp().globalData.$self_portrait);
                                MessageList.push(content);
               
                                let src="static/ring.mp3"
                                const Audio = uni.createInnerAudioContext();
                                Audio.autoplay = true;
                                Audio.src = src; //音频地址  
                                Audio.play(); //执行播放  
                 
                           uni.$emit('setUnread');
               
                               
                         uni.$emit('ShowMessage',{
                         message:content
                         });
                }
               
                if(data.type==-1)
                {
                       
                        var index=MessageList.findIndex(f=>f.id==data.id);
                       
                        if(index!=-1)
                        {
                                MessageList[index].state=2;
                        }
                        clearTimeout(timeout);
                       
                }
               
               
        });

}
export default {
        login() {
               
                cid();
        },
        logOut(){

                if(client!=undefined)
                {
                        client.end();
                        console.log("退出");
                }
               
        },
        client() {

                return client;
        },
        _unSubscribe(){
                _unSubscribe()
        },
        _subscribe(){
                _subscribe()
        },
       
        MessageList:MessageList,
        timeout:timeout,
        Message(to,mes) {
//                console.log(!client.disconnecting,":客户端连接状态");
                //console.log(client,":客户端");
               
                if( client.connected)
                {
                        client.publish(to, JSON.stringify(mes), {
                                qos: 1,
                                retain: false
                                });
                       
                }
                       
        },
        reconnect()
        {
       
                        console.log("重新连接");
                        client.end();
                        cid();
               
               
        },



}
回复 支持 反对

使用道具 举报

28

主题

117

帖子

677

积分

高级会员

Rank: 4

积分
677
QQ
发表于 2022-4-4 17:16:51 | 显示全部楼层
很可惜,学了这么久wex5,也面临楼主同样的困惑,莫非已到了分手的季节?
回复 支持 反对

使用道具 举报

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
 楼主| 发表于 2022-4-4 20:00:01 | 显示全部楼层
爱我的老鼠 发表于 2022-4-4 17:16
很可惜,学了这么久wex5,也面临楼主同样的困惑,莫非已到了分手的季节? ...

没啥可惜的。你不试试,真的不知道,太香了,,但是wex5还是可以继续用的,毕竟后台都部署好了,可以结合着开发,用wex5做baas,还是很舒服的。
回复 支持 反对

使用道具 举报

15

主题

55

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
发表于 2022-4-5 09:49:02 | 显示全部楼层
wex5还是好用的,希望官方必要放弃,哪怕是做公益
回复 支持 反对

使用道具 举报

14

主题

66

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
QQ
 楼主| 发表于 2022-4-5 20:16:00 | 显示全部楼层
szlqb 发表于 2022-4-5 09:49
wex5还是好用的,希望官方必要放弃,哪怕是做公益

主要是市场不允许啊。wex5不容易啊。
回复 支持 反对

使用道具 举报

998

主题

4330

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10720
QQ
发表于 2022-4-8 15:03:28 | 显示全部楼层
帖主的技术和学习能力很棒
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-19 22:58 , Processed in 0.061375 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表