1.后台服务端,创建后台服务用来接收和向客户端推送信息,这里用到了Fleck组件,可以用“管理NUGET程序包”来下载并安装程序包
代码如下
static void Main(string[] args) { FleckLog.Level = LogLevel.Debug; var allSockets = new List<IWebSocketConnection>(); var server = new WebSocketServer("ws://0.0.0.0:7181"); server.Start(socket => { socket.OnOpen = () => 当建立Socket链接时执行此方法 { var data = socket.ConnectionInfo; //通过data可以获得这个链接传递过来的Cookie信息,用来区分各个链接和用户之间的关系(如果需要后台主动推送信息到某个客户的时候,可以使用Cookie) Console.WriteLine("Open!"); allSockets.Add(socket); }; socket.OnClose = () =>// 当关闭Socket链接十执行此方法 { Console.WriteLine("Close!"); allSockets.Remove(socket); }; socket.OnMessage = message =>// 接收客户端发送过来的信息 { Console.WriteLine(message); socket.Send("Echo: " + message); //allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); }; }); var input = Console.ReadLine(); while (input != "exit") { foreach (var socket in allSockets.ToList()) { socket.Send(input); } input = Console.ReadLine(); } }
客户端代码
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> <script src="scripts/jquery-1.8.2.min.js"></script> <script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script> $(document).ready(function () { $.cookie('userID', '0000'); var wsImpl = window.WebSocket || window.MozWebSocket; var data = $("#Data"); data.append ( "connecting to server ..<br/>"); // 创建新的websocket新连接端口为7181 window.ws = new wsImpl('ws://localhost:7181'); // 当数据从服务器服务中心发送后,继续向下运行过程 ws.onmessage = function (evt) { data.append (evt.data + '<br/>'); }; // 当链接对象找到服务端成功对接后,提示正常打开 ws.onopen = function () { data.append ( '.. connection open<br/>'); }; // 当链接对象未找找到服务端成功对接后,提示打开失败,别切单项关闭 ws.onclose = function () { data.append ( '.. connection closed<br/>'); } $("#Submit").click(function () { var text = $("#Text").val(); ws.send(text); $("#Text").val(""); }) }) </script> </head> <body> <div> 输入内容<input type="text" id="Text" /><input type="button" id="Submit" value="提交" /> </div> <div> <pre id="Data"></pre> </div> </body> </html>
备注,如果需要关联每个Socket和用户,需要自己根据创建链接时候的在Cookie里面保存的User信息 再次建立Dictionary<string,object>对应关系,这样可以根据这个对应关系,根据服务器需要主动到对应的Socket推送信息