zoukankan      html  css  js  c++  java
  • 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推送信息

  • 相关阅读:
    EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?
    ABP Framework 5.0 RC.1 新特性和变更说明
    OI迷惑行为大赏【目前较少,持续更新中】
    【比赛日志】APIO2020(2020.08.15)
    【好题】【IPSC2003】 Got Root? 无向图删边游戏
    [HNOI2019] 校园旅行 —— 一个边界数据
    【题解】JOISC 2020 Day 3 stray
    ExtJS学习:MVC模式案例(四) 林枫705
    ExtJS学习:MVC模式案例(三) 林枫705
    ExtJS学习:MVC模式案例(二) 林枫705
  • 原文地址:https://www.cnblogs.com/notyourdog/p/9728047.html
Copyright © 2011-2022 走看看