c# 使用WebSocket来实现实时通讯

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

猜你喜欢

转载自blog.csdn.net/cuoban/article/details/88537466
今日推荐