小程序中里的bindinput_性能测试之微信小程序websocket协议

   最近复习性能测试,也想看看小程序聊天页面中的信息底层是怎么实现的,今天试着写了写。

   WebSocket协议,客户端和服务端都可以主动的推送消息,只要建立链接就能推送消息。

前置条件,需要安装小程序编译器。

页面效果:

e875808f78ae7c7c82a806079de343e3.png

后端代码,大家一看就知道,主要这是springboot工程,你懂的怎么配置与启动。

/** * @author liwen * @Title: Mywebsocket * @Description: 服务端 * @date 2019/12/24 / 13:00 */@ServerEndpoint("/chatWebsocket")@Componentpublic class Mywebsocket {    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")    private Date sendDate;    public Date getSendDate() {        sendDate = new Date();        return sendDate;    }    private static final Logger logger = LoggerFactory.getLogger(Mywebsocket.class);    /**     * 当前在线连接数     */    private static AtomicInteger onlineSize = new AtomicInteger(0);    private static Set webSocketSet = new ConcurrentSet();    private Session session;    @OnOpen    public void onOpen(Session session) {        this.session = session;        webSocketSet.add(this);        addOnlineSize();        logger.info("有客户端连接 当前在线人数:" + getOnlineSize());        try {            Msg msg = new Msg();            sendMessage("你已成功连接"+"code:200");        } catch (IOException e) {            e.printStackTrace();        }    }    @OnClose    public void onClose() {        logger.info("关闭");        webSocketSet.remove(this);        subOnlineSize();        logger.info("有客户端关闭连接,当前在线人数为:" + getOnlineSize());    }    @OnMessage    public void onMessage(String message, Session session) {        logger.info("接收客户端消息 :" + message);        if (session.isOpen()) {            //群发消息            for (Mywebsocket item : webSocketSet) {                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                //群发                synchronized (session) {                    item.sendInfoToAll(message);                }            }        }    }    @OnError    public void onError(Session session, Throwable error) {        error.printStackTrace();    }    public void sendMessage(String message) throws IOException {        if (session.isOpen()) {            this.session.getAsyncRemote().sendText(message);        }    }    public void sendInfoToAll(String message) {        webSocketSet.parallelStream().forEach(item -> {            try {                if (session.isOpen()) {                    HashMap hashMap = new HashMap<>();                    hashMap.put("content", "7DGroup欢迎您的到来");                    hashMap.put("data", getSendDate());                    hashMap.put("message", message);                    item.sendMessage(JSON.toJSONString(hashMap));                }            } catch (IOException e) {                e.printStackTrace();            }            logger.info("群发消息 " + message);        });    }    public int getOnlineSize() {        return onlineSize.get();    }    public void addOnlineSize() {        onlineSize.addAndGet(1);    }    public void subOnlineSize() {        onlineSize.addAndGet(-1);    }

小程序代码:

主要逻辑代码为:

Page({    // 初始页面数据    data: {        scrollTop: 0,        list: []    },    // 监听页面加载    id: 0,    onLoad: function () {        wx.connectSocket({            url: 'ws://127.0.0.1:8081/chatWebsocket'        });        wx.onSocketMessage(msg => {            var data = JSON.parse(msg.data.toString());            data.id = this.id++;            data.role = 'server';            var list = this.data.list;            list.push(data);            this.setData({                list: list            });            this.rollingBottom()        })    },    // 发送内容    count: 0,    massage: '',    send: function () {        // 判断发送内容是否为空        if (this.message) {          wx.sendSocketMessage({            data: this.message,          });            // 我自己的消息            console.log(this.data.list);            var list = this.data.list;            list.push({                id: this.count++,                content: this.message,                role: 'me'            });            this.setData({                list: list            });            this.rollingBottom()        } else {            // 弹出提示框            wx.showToast({                title: '消息不能为空哦~',                icon: 'none',                duration: 2000            })        }    },    // 监听input值的改变    bindChange(res) {        this.message = res.detail.value    },    // 页面卸载,关闭连接    onUnload() {        wx.onSocketClose();        wx.showToast({            title: '连接已断开~',            icon: 'none',            duration: 2000        })    },    // 聊天内容始终显示在最低端    rollingBottom(e) {        wx.createSelectorQuery().selectAll('.list').boundingClientRect(rects => {            rects.forEach(rect => {                this.setData({                    scrollTop: rect.bottom                })            })        }).exec()    }});

页面布局

class=    <view class="message">    <form>      <input type="text" cursor-spacing="50" placeholder="请输入聊天内容..." bindinput="bindChange">input>    form>  view>    <button type="primary" bindtap="send" formType="reset" size="small" button-hover="blue">发送button>  <view wx:if="{{show}}">{{text}}view>        <view class="wrap">        <scroll-view scroll-y class="chat" scroll-top="{{scrollTop}}">            <view class="list">                <view class="chat-news" wx:for="{{list}}" wx:key="{{item.id}}">                                        <block wx:if="{{item.role === 'me'}}">                                                <view class="news-lf">                            <text class="new-txt">{{item.content}}text>                            <image class="new-img" src="/images/0.png">image>                        view>                    block>                                        <block wx:else>                        <view>                            <image class="new-img" src="/images/1.png">image>                            <text class="new-txt new-text">{{item.content}}text>                        view>                    block>                view>            view>        scroll-view>    view>view>

通过上面代码就能把小程序聊天页面跑起来;

打开Jmeter新建WebSocket Sampler(如果没有就安装下)

8cf16a5d4cd0d7d64ab9e289a5fcb9e8.png

编写脚本:

cfe12d088420c089aae1fc7320d72844.png

增加结果查看数

c4c2b996d5e69c685662c3da5e246b71.png

增加监听器Summary Report

3a41073654bccf3a0446c344e28558c5.png

总结:

    做性能测试代码能力还需要有一些,否则自己想做一点东西搞不定,挺难过的,做性能测试相信你们比我强。

3b79ab896e0b951126b0eb3fb1aa8302.png

ee0993d9f451299fca09b08bcb51a092.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值