Vue结合SignalR前后端实时消息同步实现方法

本文主要为大家介绍vue结合signalr实现前后端实时消息同步,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

最近业务中需要实现服务器端与客户端的实时通信功能,对Signalr做了一点总结和整理。

SignalR 作为  ASP.NET 的一个库,能够简单方便地为应用提供实时的服务器端与客户端双向通信功能。

SignalR 在客户端方面有两种API:Connections 和 Hubs。

在特殊情况下,比如发送消息的格式是特定不变时,使用Connections API。

立即学习“前端免费学习笔记(深入)”;

大多数情况下使用Hubs,因为它是 Connections API 更高级的一种实现,允许客户端与服务端相互直接调用方法。一个实际应用的具体场景,比如服务端获取到新订单时,调用客户端的打印方法,客户端打印完成后,调用服务端的订单状态更新方法。

下面介绍 Hubs 在前端的 API

generated proxy

当使用generated proxy的时候,在语法层面上可以更加简单地调用服务端方法,就像在服务端直接调用。

如下面是服务端的代码,表示新增一条聊天信息到列表

public class DemoChatHub : Hub{  public void NewChatMessage(string name, string message)  {    Clients.All.addMessageToList(name, message);  }}

登录后复制

客户端调用的时候:

var demoChatHubProxy = $.connection.DemoChatHub;demoChatHubProxy.client.addMessageToList = function (name, message) {  console.log(name + ' ' + message);};$.connection.hub.start().done(function () {   $('#newChatMessage').click(function () {     demoChatHubProxy.server.newChatMessage($('#displayname').val(), $('#message').val());   });});

登录后复制

不使用 generated proxy 时,客户端调用的时候则是

var connection = $.hubConnection();var demoChatHubProxy = connection.createHubProxy('demoChatHub');demoChatHubProxy.on('addMessageToList', function(name, message) {  console.log(name + ' ' + message);});connection.start().done(function() {  $('#newChatMessage').click(function () {    demoChatHubProxy.invoke('newChatMessage', $('#displayname').val(), $('#message').val());    });});

登录后复制

但是在Vue项目里面,如果前后端分离,不会这样引用:


登录后复制

而且在客户端方法中如果要使用多个事件处理器时,不能使用generated proxy。

因此后面的例子不采取generated proxy的方式。

1.如何建立连接

var connection = $.hubConnection('localhost:23123');//如果前后端为同一个端口,可不填参数。如果前后端分离,这里参数为服务器端的URLvar demoChatHubProxy = connection.createHubProxy('demoChatHub');demoChatHubProxy.on('addMessageToList', function(userName, message) {  console.log(userName + ' ' + message);}); connection.start()  .done(function(){ console.log('Now connected, connection ID=' + connection.id); })  .fail(function(){ console.log('Could not connect'); });

登录后复制

需要注意的是,开始连接之前(调用 start 方法之前),最好注册至少一个事件处理方法,如果没有注册的话,Hubs的 OnConnected 方法将不会被调用,那么客户端的方法就不能被服务端调用(这容易埋坑,所以要提前注册方法)。

2.客户端如何调用服务器端方法
使用 invoke,注意调用服务器端的方法名首字母可以不大写,如果方法名称要限制必须大写,需要后端做配置。

demoChatHubProxy.invoke('newChatMessage', {name:'a',message:'b'});

登录后复制

3. 服务器端调用客户端方法

首先客户端要注册方法才能让服务器端调用,使用 on 方法注册。

demoChatHubProxy.on('addMessageToList', function(userName, message) {  console.log(userName + ' ' + message);});

登录后复制

4 在Vue项目中使用SignalR

首先安装 SignalR 的package,需要注意的是 SignalR 依赖 jQuery。

npm i signalr,jquery

为了方便,在webpack.base.conf.js中注册全局的jQuery

plugins: [new webpack.ProvidePlugin({      $: 'jquery',      jQuery: 'jquery',      'window.jQuery': 'jquery',      'root.jQuery': 'jquery'    })  ]

登录后复制

然后在main.js中引入 SignalR

import ‘signalr’

这时候就可以在Vue项目中使用SignalR了,后端的相关配置暂时略过。

新建一个signalr.js

import { Message } from 'element-ui';const HUBNAME = 'DefaultHub';/*客户端调用服务器端方法*///更新订单打印次数const updateOrderPrint = {  name:'updateOrderPrint',  method:function(data){    console.log(data)  }}/*服务器调用客户端方法*/// 打印新订单const printNewOrder = {  name:'printNewOrder',  method:function(data){    console.log(data)  }}const get = {  name:'Get',  method:function(data){    console.log(data)  }}//服务器端的方法const serverMethodSets = [updateOrderPrint];//客户端的方法const clientMethodSets = [printNewOrder,get]; //将需要注册的方法放进集合// 建立连接export function startConnection() {  let hub = $.hubConnection(process.env.HUB_API)  let proxy = createHubProxy(hub) //需要先注册方法再连接  hub.start().done((connection) =>{    console.log('Now connected, connection ID=' + connection.id)  }).fail(()=>{    Message('连接失败' + error);    console.log('Could not connect');  })  hub.error(function (error) {    Message('SignalR error: ' + error);    console.log('SignalR error: ' + error)  })  hub.connectionSlow(function () {    console.log('We are currently experiencing difficulties with the connection.')  });  hub.disconnected(function () {    console.log('disconnected')  });  return proxy}// 手动创建proxyexport function createHubProxy(hub){  let proxy = hub.createHubProxy(HUBNAME)  // 注册客户端方法  clientMethodSets.map((item)=>{    proxy.on(item.name,item.method)  })  return proxy}

登录后复制

这样,在组件引入signalr.js后调用startConnection方法即可建立连接。

相关推荐:

python基于itchat实现微信群消息同步机器人

以上就是Vue结合SignalR前后端实时消息同步实现方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787306.html

(0)
上一篇 2025年3月8日 18:06:10
下一篇 2025年3月8日 18:06:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS中常用消息框

    本文主要和大家分享js中常用消息框,希望能帮助到大家。 首先来看下运行效果 加下来分享一下全部代码: nbsp;html>        Document    function warn_info(){ alert(“提示消息框”)…

    2025年3月8日
    200
  • 纯前端技术做实时预览的markdown编辑器

    这次给大家带来纯前端技术做实时预览的markdown编辑器,用纯前端技术做实时预览的markdown编辑器的注意事项有哪些,下面就是实战案例,一起来看一下。 第一步 搭建布局:1.构思布局(以下是总体布局) 2.项目下新建个index.ht…

    2025年3月8日
    200
  • 如何自定义显示消息数量

    这次给大家带来如何自定义显示消息数量,自定义显示消息数量的注意事项有哪些,下面就是实战案例,一起来看一下。 根据需求简单的实现一个小功能控件,暂时不支持扩展。 $(”xxxxxxx”).iconCountPlugin(options, st…

    编程技术 2025年3月8日
    200
  • JS常用的消息框有哪些

    这次给大家带来JS常用的消息框有哪些,JS常用消息框的注意事项有哪些,下面就是实战案例,一起来看一下。 首先来看下运行效果 加下来分享一下全部代码: Document function warn_info(){ alert(“提示消息框”)…

    2025年3月8日
    200
  • ajax怎么实现实时验证功能

    这次给大家带来ajax怎么实现实时验证功能,ajax实现实时验证功能的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是ajax Ajax 即“Asynchronous Javascript And XML”(异步 JavaScrip…

    编程技术 2025年3月8日
    200
  • PHP+Ajax如何实现表格的实时编辑

    这次给大家带来PHP+Ajax如何实现表格的实时编辑,PHP+Ajax实现表格实时编辑的注意事项有哪些,下面就是实战案例,一起来看一下。 如果我们的对于一个表格中所有的数据都能在本页进行操作那该是多酷炫的一件事(用起来炒鸡爽)! 用Ajax…

    编程技术 2025年3月8日
    200
  • 微信小程序里怎么做出滚动消息通知效果

    这次给大家带来微信小程序里怎么做出滚动消息通知效果,微信小程序里做出滚动消息通知效果的注意事项有哪些,下面就是实战案例,一起来看一下。 index.wxml {{item.title}} 登录后复制 index.js //index.js/…

    编程技术 2025年3月8日
    200
  • ajax实现简单实时验证功能

    这次给大家带来ajax应该怎样实现实时验证,ajax实现实时验证的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是ajax Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript …

    编程技术 2025年3月8日
    200
  • input输入框内容实时获取

    这次给大家带来input输入框内容实时获取,input输入框内容实时获取的注意事项有哪些,下面就是实战案例,一起来看一下。 输入框内容实时监测!只有输入框内容发生改变才会触发事件,如果输入框内容没有改变则不会触发该事件! 代码如下: fun…

    编程技术 2025年3月8日
    200
  • jquery实现表格排序+实时搜索功能

    这次给大家带来jquery实现表格排序+实时搜索功能,jquery实现表格排序+实时搜索功能的注意事项有哪些,下面就是实战案例,一起来看一下。 复制代码 代码如下: First Name Last Name Email Phone Numb…

    2025年3月8日
    200

发表回复

登录后才能评论