当前位置: 首页 > news >正文

使用Service Bus + SignalR 实现聊天室

在实践本示例之前,你需要已经:
1. 有Azure账号
2. 已经创建了Service bus
3. 有权限部署到Cloud


1. 创建Azure Cloud Service 项目



2. 选择1个WebRole





3. 创建一个Hubs文件夹和ChatHub.cs:



public void Send(string name, string message)
{
   Clients.All.broadcastMessage(name, message, Environment.MachineName, RoleEnvironment.CurrentRoleInstance.Id);
}


4. 安装所需要的nuget: 


microsoft asp.net signalR



signalR service bus



5.打开Home/Index.cshtml


添加如下代码(注意你的jquery和signalR版本,做相应替换):


@{
    Layout = null;
}
<html>
<head>


    <link rel="shortcut icon" href="http://icons.iconarchive.com/icons/sora-meliae/matrilineare/96/Status-dialog-information-icon.png">


    <script src="~/Scripts/jquery-1.10.2.js"></script>
    <script src="~/Scripts/jquery.signalR-2.2.0.js"></script>
    <script src="/signalr/hubs"></script>






</head>
<body>
    <div class="container">
        <input type="text" id="message" />
        <input type="button" id="sendmessage" value="Send" />
        <input type="hidden" id="displayname" />
        <ul id="discussion"></ul>
    </div>




    <script type="text/javascript">
    $(function () {


        var newMsg = false;
        var window_focused = false;


        var chat = $.connection.chatHub;
        chat.client.broadcastMessage = function (name, message, machineName, instanceId) {


            newMsg = true;


            var encodedName = $('<div />').text(name).html();
            var encodedMsg = $('<div />').text(message).html();
            $('#discussion').append('<li><strong>' + encodedName + '</strong>:  ' + encodedMsg );
        };


        var name = prompt('Enter your name:', '');
        $('#displayname').val(name);


        $("#discussion").append("<li><strong>" + name + " entered" + " room </strong></li>");
        $('#message').focus();




        $("#message").keydown(function(e) {
            if (e.keyCode === 13) {
                $('#sendmessage').click();
            }
        });




        function setTitle1() {
            if (newMsg === true) {
                document.title = "New Msg";
                setTimeout(setTitle2, 500);
            }
        }


        function setTitle2() {
            if (newMsg === true) {
                document.title = "";
                setTimeout(setTitle1, 500);
            }
        }


        setInterval(function() {
            if (window_focused === false) {
             setTitle1();
         }  
        }, 1000);


        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                newMsg = false;


                chat.server.send($('#displayname').val(), $('#message').val());
                $('#message').val('').focus();


                
            });
        });


        $(window).focus(function (e) {
            newMsg = false;
            window_focused = true;
        });
    });
    </script>


    
</body>
</html>








6. 打开Web.config,把ServiceBus的连接串放在AppSetting中:


<add key="ServiceBusConnectionString" value="Endpoint=sb://your string/;SharedAccessKeyName=your key;SharedAccessKey=your key" /></appSettings>




7. 打开App_Star/Starup.Auth.cs


添加如下代码:


GlobalHost.DependencyResolver.UseServiceBus(
            CloudConfigurationManager.GetSetting("ServiceBusConnectionString"), "MyChat");
            app.MapSignalR();




8. Publish你的AzureCloudService到Azure。


相关文章:

  • 中移动OMS系统展望..
  • Asp.net MVC4 + signalR 聊天室实现
  • JSF的国际化
  • javascript 替换浏览器Tab的title实现消息通知提示
  • 很好很强大 中移动OMS开源操作系统使用感想
  • [Windows编程] 获取系统CPU 个数
  • 算法练习之DP 求LCM (最长公共子序列)
  • C#中的特性Attribute
  • 算法练习 -- DP 查找和为指定数字的数组
  • 2009英雄会后记:最出彩是创业 最关注是产品 最可惜是创富
  • 算法练习--- DP 求解最长上升子序列(LIS)
  • Bellman ford 最短路径算法
  • ArcGIS Server Java ADF 案例教程 14
  • 扩展MongoDB C# Driver的QueryBuilder
  • ArcGIS Server Java ADF 案例教程 15
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • Angular数据绑定机制
  • CentOS 7 修改主机名
  • ESLint简单操作
  • Laravel 菜鸟晋级之路
  • LeetCode29.两数相除 JavaScript
  • Linux后台研发超实用命令总结
  • Netty源码解析1-Buffer
  • overflow: hidden IE7无效
  • React的组件模式
  • VUE es6技巧写法(持续更新中~~~)
  • 使用 Docker 部署 Spring Boot项目
  • 《码出高效》学习笔记与书中错误记录
  • linux 淘宝开源监控工具tsar
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #define,static,const,三种常量的区别
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (九十四)函数和二维数组
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (新)网络工程师考点串讲与真题详解
  • (一)Neo4j下载安装以及初次使用
  • (译) 函数式 JS #1:简介
  • (原)本想说脏话,奈何已放下
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .net 按比例显示图片的缩略图
  • .NET 反射 Reflect
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET上SQLite的连接
  • .net下简单快捷的数值高低位切换
  • .net与java建立WebService再互相调用
  • /bin/rm: 参数列表过长"的解决办法
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [].shift.call( arguments ) 和 [].slice.call( arguments )