ASp.Net Websocket 服务器端实现(三)

写文不容易,请尊重原创:转载注明 http://blog.csdn.net/meng6098

简陋聊天室简单的asp.net代码实现:

 

 public static Dictionary<string, WebSocket> WSdic = SocketHelper.GetDic; //链接对象字典及用户字典

  public static Dictionary<string, object> dicjson = new Dictionary<string, object>();

  public WebSocket socket = null;

  public Thread thread = null;

  ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);

//封装的发送方法

 private void RetenMsg(string msg,int i=-1)

        {

            string remsg = "{\"Msg\":\"" + msg + "\"}";

            if (i!=-1)

            {

                i = WSdic.Count;

                remsg = "{\"Msg\":\"" + msg + "\",\"nums\":\""+i+"\"}";

            }

            foreach (var dic in WSdic)//将消息分别发送给所有用户

            {

                ArraySegment<byte> buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(remsg));

                dic.Value.SendAsync(buffer, System.Net.WebSockets.WebSocketMessageType.Text, true, System.Threading.CancellationToken.None);

            }

        }

 

//创建异步方法

 public async Task DoTalking(AspNetWebSocketContext context)

{

            bool isAdd = false;//判断此socket是否加入到集合中

            socket = context.WebSocket;

            WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);//从链接异步接受数据

            if (socket.State != WebSocketState.Open)//当前用户为不是链接状态

            return;

            }

            解析数据

            如果是用户接入且链接状态为open将用户名和ws对象放入到用户字典中

 

             while (true)            {

                 获取ws数据

                /*这里有一个好玩的地方。当获取ws数据的时候。当有客户端有消息传入的时候才进入到下边否则在此停住,所以不用害怕while把你的服务器拖死*/

                

               if (socket.State == WebSocketState.Open)//当链接状态

                {

                   对内容进行判断

                   如果是消息则执行消息发送方法

                    

                }

                Else//当不是链接状态时跳出死循环,执行移除方法

                {

                    break;

                }

            }

           if (isAdd&&WSdic.ContainsKey(extstr))//移除关闭的socket

            {

               执行移除方法

            }

}

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值