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

来源:互联网 发布:c语言头文件作用 编辑:程序博客网 时间:2024/05/16 19:29

写文不容易,请尊重原创:转载注明 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            {               执行移除方法            }} 

 

0 0
原创粉丝点击