使用websocket,实现前后端通讯的示例,可针对不同用户发送不同信息

前端

这里项目要求,使用的jq语法

  function createwebsocket() {
 if (typeof (WebSocket) == "undefined") {
         console.log("您的浏览器不支持WebSocket");
       } else
        {
        var socket;
           var token = ""//用户唯一标识
//?后面可以带你自己的参数,一般我是作为接收者的唯一标识处理,这样服务端可针对性发送消息
           socket = new WebSocket("ws://你的ip后面是端口:5001?"+token);
         //连接打开事件
          socket.onopen = function() {
         };
         //收到消息事件
         socket.onmessage = msg => {
         var result=msg.data;
         };
         //连接关闭事件
         socket.onclose = function() {
           console.log("Socket已关闭");
         };
         //发生了错误事件
         socket.onerror = function() {
          console.log("Socket发生了错误");
         }
         //窗口关闭时,关闭连接
         window.unload=function() {
           socket.close();
         };
       }
}

后端

1、使用nuget下载Fleck包

2、建立链接,用控制台创建方法,并运行

 //全局
List<IWebSocketConnection> allSockets = new List<IWebSocketConnection>();
public  void CsWebsocket()
        {
                FleckLog.Level = Fleck.LogLevel.Debug;
//ws标识http,wss为https
                var server = new WebSocketServer("ws://你的ip地址,后面是你的端口:5001");
                server.Start(socket =>
                {
                    socket.OnOpen = () =>
                    {
//用户建立链接后,将用户存储至全局socket集合
                        Logger.Info("Open:" + socket.ConnectionInfo.Path);
                        allSockets.Add(socket);
                    };
                    socket.OnClose = () =>
                    {
//用户断开链接,从全局集合中移除
                        Logger.Info("Close:" + socket.ConnectionInfo.Path);
                        allSockets.Remove(socket);
                    };
                    socket.OnMessage = message =>
                    {
                        Console.WriteLine(message);
                        //allSockets.ForEach(s => s.Send("Echo: " + message));
                    };
                });
                Console.ReadLine();
        }

3、服务端向接收端发送请求,这里可以根据你实际业务情况进行修改

      foreach (var socket in socketlist)
                        {
//这段代码是收到请求后,处理完具体业务,然后把处理成功的消息发送给具体的接收者
//前端url后面是可带参数的,参数存储在socket.ConnectionInfo.Path路径中,稍微切割下就好了
                            if (Params.userid == socket.ConnectionInfo.Path.Split('?')[1])
                            {
                                try
                                {
                                    socket.Send("导出成功");
                                }
                                catch (Exception ex)
                                {
                                   
                                }
                            } 
                        }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值