websocket业务代码

需求

用户登陆后,服务器实时推送用户的订单提醒,用websocket处理。

方案

两个js,notify-socket.js处理socket的连接,和socket的处理。

nofify.js,做右下角弹窗处理,用到了layui的弹窗组件。

notify-socket.js

/**
 * Created by nuanfeng on 2016/9/20.
 */

define(function(require, exports, module) {
    require(‘jQuery‘);

    var util = require(‘util‘),
        jsonApi = require(‘jsonApi‘),
        Notify = require(‘notify‘);

    var Elems = {

    };

    socketArea = {
        /**
         * 注册socket身份凭证
         */
        registerSocket: function(){
            var self = this,
                uri = jsonApi.socketRegister;
            console.log(‘e‘);
            try {
                util.ajaxFn(uri, {}, function (data) {

                    self.initSocket(data);
                }, function () {
                    setTimeout(function () {
                        console.log("重新注册socket...");
                        self.registerSocket();
                    }, 5000);
                });
            } catch (e) {
                setTimeout(function () {
                    console.log("重新注册socket...");
                    self.registerSocket();
                }, 5000);
            }
        },

        /**
         * 心跳事件
         */
        heartBeatEvent: function(socket, data) {
            window.setInterval(function () {
                console.log((new Date()).Format(‘yyyy-MM-dd hh:mm:ss‘) + "\t心跳事件....");
                if (socket) {
                    data.dataType = 1000;
                    socket.send(JSON.stringify(data));
                }
            }, 1000 * 60);
        },

        /**
         * 初始化socket
         * @param data
         */
        initSocket: function(data) {
            var self = this;
            var data = data.data;
            var socket = new WebSocket(‘ws://192.168.10.111:9092/websocket‘);
            //var socket = new WebSocket(‘ws://192.168.10.19:9092/websocket‘);

            //open socket
            socket.onopen = function (event) {
                data.dataType = 1;

                //send a init msg
                socket.send(JSON.stringify(data));

                //listen
                socket.onmessage = function (event) {
                    var data = JSON.parse(event.data);
                    console.log("onmessage -->> ", event);
                    //self.msgHandle(JSON.parse(event.data));
                    var notify = new Notify();
                    notify.showMessage(JSON.parse(event.data));
                };

                socket.onclose = function (event) {
                    console.log("onclose -- >>>于" + new Date(), event);
                }
            }
            self.heartBeatEvent(socket, data);
        },

        /**
         * 处理
         * @param data
         */
        msgHandle: function(data) {
            var self = this;

            if (data.flag == 1) { // success
                switch (data.dataType) {
                    case 1: //注册
                        self.registerSocketEvent(data);
                        break;
                    case 2: // 支付
                        self.paySocketEvent(data);
                        break;
                    case 3: // 需求
                        self.needSocketEvent(data);
                        break;
                    case 4: // 下单
                        self.orderSocketEvent(data);
                        break;
                    case 5: // 新用户审核
                        self.userCheckSocketEvent(data);
                        break;
                    case 6: // 提现
                        self.withDrawSocketEvent(data);
                        break;
                    case 7: // 退款
                        self.refundSocketEvent(data);
                        break;
                    case 0: // default
                        break;
                }
            }
        },

        /**
         * 注册事件
         * @param data
         */
        registerSocketEvent: function (data) {
            console.log("恭喜,于" + (new Date()).Format(‘yyyy-MM-dd hh:mm:ss‘) + "注册成功...");
        },

        /**
         * 支付事件
         * @param data
         */
        paySocketEvent: function (data) {
            console.log("您有新的订单已支付...");
            mallMenu.refreshShipStats(true);
        },

        /**
         * 需求事件
         * @param data
         */
        needSocketEvent: function (data) {
            console.log("您有新的需求需要报价...");
            mallMenu.refreshNeedStats(true);
        },

        /**
         * 下单事件
         * @param data
         */
        orderSocketEvent: function (data) {
            console.log("您有新的订单已生成");
        },

        /**
         * 用户审核事件
         * @param data
         */
        userCheckSocketEvent: function (data) {
            console.log("你有新的用户需要审核...");
            // TODO: 根据不同的data跳转不同的列表页面
            mallMenu.refreshUserStats(true);
        },

        /**
         * 提现申请事件
         * @param data
         */
        withDrawSocketEvent: function (data) {
            console.log("您有新的提现申请需要处理...");
            mallMenu.refreshFinance(true);
        },

        /**
         * 退款申请事件
         * @param data
         */
        refundSocketEvent: function (data) {
            console.log("您有新的退款申请需要处理...");
            mallMenu.refreshFinanceStats(true);

        }

    };

    module.exports = socketArea;

});

 

notify.js

/**
 * Created by nuenfeng on 2016/9/20.
 */

define(function(require, exports, module) {
    function Notify(params, callback) {
        this.init();
    }

    Notify.prototype.init = function () {
        console.log(‘notify init...‘)
    }

    Notify.prototype.showMessage = function(data){
        var msg;
        if (data.dataType==1 || data.dataType==8) {
            //return;
        } else {
            msg = data.data.message;
        }

        var html = ‘<div class="cont">‘;
        html += ‘<p>‘ + msg + ‘</p>‘;
        switch(data.dataType) {
            case 1:
                //html += ‘<a load="./main-pages/goods/goods-list.html" class="sui-btn btn-primary btn-radius btn-small" id="J_NoticeBtn">立即查看</a>‘;
                break;
            case 2:
                html += ‘<a href="/seller/father/orders.html?orderStatus=1" class="sui-btn btn-primary btn-radius btn-small" id="J_NotifyBtn">立即查看</a>‘;
                break;
            case 4:
                html += ‘<a href="/seller/father/orders.html?orderStatus=0" class="sui-btn btn-primary btn-radius btn-small" id="J_NotifyBtn">立即查看</a>‘;
                break;
        }
        html += ‘</div>‘;
        layer.open({
            type: 1,
            title: ‘通知‘,
            closeBtn: 1,
            shade: [0],
            area: [‘340px‘, ‘215px‘],
            offset: ‘rb‘, //右下角弹出
            time: 5000, //5秒后自动关闭
            content: html,
            shift: 2,
            skin: ‘notify-panel‘,
            move: false
        });
        voicePlay(data.dataType);
    }

    var voicePlay = function(dataType){
        var audio = new Audio("/js/components/notify/voice-newmsg.mp3");
        audio.play();
    }

    module.exports = Notify;
});

  

时间: 2024-10-07 03:55:25

websocket业务代码的相关文章

Cocos2d-x-javaScript 的webSocket的代码

var WebSocket = WebSocket || window.WebSocket || window.MozWebSocket; var WebSocketManager = cc.Class.extend({ _wsObj:null, _wsReConnectTimes:0, _reConnectMax:3, _connectTimeout:5, _reConnectFlag:false, _msg:null, _msgKey:null, _msgSendStatus:'nothin

CSDN日报20170413 ——《天天写业务代码的那些年,我们是如何成长过来的》

[程序人生]天天写业务代码的那些年,我们是如何成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboot实战:我们的第一款开源软件 作者:纯洁的微笑 在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? [物联网]Android Things:外设I/O接口-I2C 作者:1024工场 内部集成电路(

天天写业务代码,如何成为技术大牛

前序 在工作之余浏览公司的技术网站,看到了以下这篇文章,细细读来真心觉得不错,写得有价值很实在.于是想联系下作者,问一下是否可以转载.打开钉钉一搜,作者是资深技术专家,差不多就是技术总监级别啊,这也从侧面旁征了,以下的内容是有其亲身经历,切实体会的,而不是鸡汤口号之流.相较与作者的级别,自己确实惭愧汗颜,所以没好直接聊天询问而是在文章底下留言.在得到了作者的同意后将文章的内容贴到这里,作为分享也作为自己的鞭策和提醒.在这里谢谢我的大牛同事了^_^. ....................以下内

天天写业务代码的那些年,我们是如何成长过来的

比起写业务代码更不幸的是,主要工作是修 Bug,bug,buG, bUg. 在一家大的公司里,不同的人总会有不同的运气: 运气好的人遇上一个好的项目,升职加薪,从此就走上了人生的巅峰. 运气差的人摊上一个差的项目,升不了职,少加了薪,并且还获得不了技术成长. 我刚毕业那会儿,所在团队的主要工作是,维护一个『又老又旧』的系统.比起写业务代码更不幸的是,我们的主要工作是修 Bug,bug,buG, bUg. 那一年多里,尽管都是维护旧系统和少量的新需求,我们还是在飞速的成长~~.而来源主要是: 组内

业务代码与非业务代码

1.什么是业务代码? 直接用于实现用户需求的代码就是业务代码,比如用户需要查询某个数据,那么直接查询数据库,返回结果的代码,就是业务代码. 2.什么是非业务代码? 辅助业务代码,一般可以脱离业务而存在的代码,比如用户查询某个数据,接收用户输入可能出现中文乱码,这时解决中文乱码的代码并不直接包含在用户的目的中,可以脱离当前业务,应用于其他业务中,这一代码就是非业务代码. 3.区分业务代码与非业务代码的标准 是否被目的直接指向,是否可以脱离具体业务而存在. 4.区分业务代码与非业务代码的目的 区分业

天天写业务代码,如何成为技术大牛?

不管是开发.测试.运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而"梦想是美好的,现实却是残酷的",很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说"天天写业务代码还加班,如何才能成为技术大牛",测试说"每天都有执行不完的测试用例",运维说"扛机器接网线敲shell命令,这

JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码

本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍),并准确定位系统瓶颈:我们应用里静态对象不是太多.有大量的业务线程在频繁创建一些生命周期很长的临时对象,代码里有问题.那么问题来了,如何在海量业务代码里边准确定位这些性能代码?本文将介绍如何使用阿里开源工具 TProfiler 来定位这些性能代码,成功解决掉了 GC 过于频繁的性能瓶颈,并最终在上次优化的基础

漫谈反射在业务代码中的应用

很多人都觉得写业务代码很枯燥,没有什么技术含量,大部分就是if-else逻辑的叠加.写业务代码确实没有写中间件来的高大上,但是我觉得不管是写什么代码,想要写出好的代码都不是一件容易的事情.这不,最近我们生产系统的版本迭代过程中一个需求就让我思考了很多,并且在实现方式上做得更加的优雅. 场景如下:我们在生产系统中需要维护各个游戏的状态,当需要上线一个游戏时,需要对该游戏的各方面的信息做一遍检查,当检查所有的字段都达到要求之后,再切换该游戏的状态为已上线.首先,针对安卓游戏,我们需要检查该游戏的资质

业务代码解构利器--SWAK

摘要: 作者:闲鱼技术-紫思 简介 业务的不断发展.商品类型的不断增多.不断添加的业务需求使得闲鱼的代码出现"bad smell"--平台代码和业务代码耦合严重难以分离:业务和业务之间代码交织缺少拆解.这也是行业中的通病. 作者:闲鱼技术-紫思 简介业务的不断发展.商品类型的不断增多.不断添加的业务需求使得闲鱼的代码出现"bad smell"--平台代码和业务代码耦合严重难以分离:业务和业务之间代码交织缺少拆解.这也是行业中的通病.为解决此类问题,闲鱼自研了一套技术