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推送信息
