在学习Comet技术的时候,发现有SiganlR的类库使用起来不错,而且使用起来也特别方便,没用什么特别复杂的配置和编码。
SignalR的代码分为服务器端的后台代码和前端的js代码。
对于服务器端,需要建立一个SignalR的文件夹,然后在里面添加相应的消息处理类,这些类必须继承Hub类,同时需要设置该类的HubName属性(客户端会引用一个以该属性名字的动态js代码)
[HubName("messageHub")] public class MessageHub : Hub { public void Send(string message) { this.Clients.addMessage(message); } }
对于客户端,除了引用一些基本的Signal和jquery的辅助js库外,还有一个很重要的引用js,即服务端SignalR文件下面的服务js文件(SignalR会根据上面HubName的属性名字生成一个相应的js文件),这个文件里面相应的对象负责实际的接收和发送数据的工作。
<script src="../../Scripts/jquery.signalR.min.js" type="text/javascript"></script> <script src="../../Scripts/json2.min.js" type="text/javascript"></script> <script src="/signalr/hubs" type="text/javascript"></script> <script type="text/javascript"> $(function () { var messageHub = $.connection.messageHub; messageHub.addMessage = function (message) { $('#ulLog').append('<li>' + message + "</li>") }; $.connection.hub.start(); $("#btnOK").click(function () { var message = document.getElementById("txtInput").value; if (message != "") { messageHub.send(message); } }); }); </script>SignalR屏蔽了底层的comet的长连接的具体细节,而系统只需要关注发送和接收数据即可,暂时还没有测试SignalR的负载能力,有空可以深入一下。
用例代码见附件
引用