SignalR,前端js代码,再次封装

本文介绍了一个基于 jQuery 和 SignalR 的工具库 SignalrTools.js 的使用方法。该工具库简化了客户端与服务器之间的实时通信过程,包括连接管理、事件监听、组管理和数据传输等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SignalrTools.js

//需要按顺序引入的文件jquery-1.6.4.min.js,jquery.signalR-2.3.0.js,signalr/hubs,SignalrTools.js
//SRTools.oFn = { welcome: function () { alert("欢迎连接到技术员") },sorry: function () { alert("技术员正忙") }};////配置需要客户端调用的方法
//SRTools.oQs = { "name": "zzz", "uid": "ddd" };////向服务器传字符串数据
//SRTools.logging=true//启用客户端日志
//==========上面配置是可选===
//SRTools.proxy = chat;//分配代理
//SRTools.start();////打开连接
//SRTools.server.send(msg)//调用服务器方法
//$("#closeBtn").click(function(){SRTools.stop()});//关闭连接
//


var SRTools = {
    //=====================以下配置信息,需要在start()前配置好====================
    proxy: null, //配置代理
    oFn: null, //需要在服务器端调用的客户端方法,json对象{方法名:方法体}可选,会自动调用setClientFn(oFn),也可以直接调用这个方法设置
    logging: false,   // bool:是否开启控制台日志,可选
    oQs: null, //json对象,querystring 字符串数据,在服务器,context.querystring[name]获取,可选,会自动调用setQs(oQs),也可以直接调用这个方法设置
    transport: {transport: ['webSockets', 'longPolling'] },//指定传输方法
    //====================以下是内部方法,不用管==============================
    url:null,
    config: config,//设置参数,内部调用,只调用一次
    init: init, //初始化,内部自动调用,可将会手动调用的初始放这里
    //====================以下是可调用的方法==============================
    setClientFn: setClientFn, //start方法之前设置setClientFn(oFn)
    setQs: setQs, //start方法之前设置setQs(oQs, bool)bool:true,不覆盖原来信息,默认覆盖
    start: start,//开启连接
    stop: stop,//断开连接,只是断开了服务器连接
    state: null,  //传递状态,属性SRTools。state.username="zs",服务器clients.caller.username访问
    joinGroup: joinGroup,//调用服务器添加组,需要服务器添加同名方法
    leaveGroup: leaveGroup,//调用服务器删除组,需要服务器添加同名方法
    server: null,//获得服务器对象,调用服务器方法
    startDone:function(){},
    //======================事件======================
    starting: function (fn) { $.connection.hub.starting(fn) },//连接发送数据之前触发
    received: function (fn) { $.connection.hub.received(fn) },//连接上接到任何数据时触发
    connectionSlow: function (fn) { $.connection.hub.connectionSlow(fn) },//客户端有延迟时,或频繁删除触发
    reconnecting: function (fn) { $.connection.hub.reconnecting(fn) },//当底层传输开始重新连接时引发。
    reconnected: function (fn) { $.connection.hub.reconnected(fn) },//当底层传输重新连接时引发。
    stateChanged: function (fn) { $.connection.hub.stateChanged(fn) },//连接状态更改时引发。提供旧状态和新状态(连接,连接,重新连接或断开连接)。
    disconnected: function (fn) { $.connection.hub.disconnected(fn) },//连接断开时引发
};


//=================================具体方法实现==================================


function init() {this.config();}
function setClientFn(ofn) { $.extend(this.proxy.client, this.oFn); }
function stop() { $.connection.hub.stop();console.error("连接已关闭") }
function joinGroup(groupname) { this.server.joinGroup(groupname); }
function leaveGroup(groupname) { this.server.leaveGroup(groupname); }
function config() {
    if (!this.initOnOff) {
        if (!this.proxy) {
            alert("必须设置连接代理");
            return;
        }
        if (this.logging) $.connection.hub.logging = true;
        if (this.oQs) this.setQs(this.oQs)
        if (this.oFn) this.setClientFn(this.oFn);
        this.state = this.proxy.state;
        this.server = this.proxy.server;
        this.initOnOff = true;
    }
}
function setQs(oQs, bool) {
    if (bool) {
        $.extend(this.oQs, oQs);
        oQs = this.oQs;
    }
    $.connection.hub.qs = oQs;
}
function start() {
    if (!this.initOnOff) {
        this.init();
    }
    return $.connection.hub.start(this.transport);
}

使用示例

//可选配置===============
 $.connection.hub.url = url + "/signalr";//如果是跨域需设置服务器地址
 SRTools.logging = true;//开启控制台日志---可选
 SRTools.oFn ={stopCon:SRTools.stop}//设置服务器可调用的客户端方法---可选
 SRTools.oQs = { "userID": user.userID, "password": user.password };//传输数据导服务器---可选
 //必须==================
 SRTools.proxy = $.connection.serviceHub;//分配代理
   SRTools.start().done(function () {//启动连接
                SRTools.startDone();//加载面板
            });

可选事件

 SRTools.starting(function (){})//监听成功事件
  SRTools.reconnecting(function (){})//监听重新连接
  SRTools.reconnected(function (){})//监听重新连接成功
  SRTools.disconnected(function (){})//监听断开连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值