Ejemplo n.º 1
0
        /// <summary>
        /// 无论是SuperSocket还是WebSocket都需要心跳包,需要健康检查,每隔多长时间去发送一条消息,浏览器定时发送消息给服务器,
        /// 服务器接收到某一条特定的消息之后,马上回复给浏览器,那就表示连接是正常的;否则就需要去重新连接,其实就是短信重连;
        /// </summary>
        /// <param name="aspNetWebSocketContext"></param>
        /// <returns></returns>
        public async Task handSocket(AspNetWebSocketContext aspNetWebSocketContext)
        {
            WebSocket socket = aspNetWebSocketContext.WebSocket;

            //保存起来
            SocketManger.AddSocket(_name, Guid.NewGuid().ToString(), socket);

            CancellationToken token = new CancellationToken();

            while (socket.State == WebSocketState.Open)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[8192]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, token);

                string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                if (!string.IsNullOrEmpty(userMessage))
                {
                    //前端调用关闭事件
                    if (result.MessageType == WebSocketMessageType.Close)
                    {
                        //如果是群聊的话,则要把该用户从Socket的list中移除
                        await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, token);
                    }
                    else
                    {
                        SocketManger.SendOne(userMessage, token);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// !!!注意:在Configure方法中添加 app.UseWebSockets();
        ///
        /// core webSocket 此demo暂未实现,获取信息时老是报链接已关闭
        /// 不获取信息,仅发送信息没问题
        ///
        /// </summary>
        public async void MyWebSocket(string name)
        {
            if (base.HttpContext.WebSockets.IsWebSocketRequest)
            {
                System.Net.WebSockets.WebSocket socket = await HttpContext.WebSockets.AcceptWebSocketAsync();

                //保存起来
                SocketManger.AddSocket(name, Guid.NewGuid().ToString(), socket);

                CancellationToken token        = new CancellationToken();
                string            userMessage2 = await ReceiveStringAsync(socket);

                //while (socket.State == WebSocketState.Open)
                //{
                //    //ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[8192]);
                //    //WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, token);
                //    //string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                //    string userMessage = await ReceiveStringAsync(socket);


                //    if (!string.IsNullOrEmpty(userMessage))
                //    {
                //        //if (result.MessageType == WebSocketMessageType.Close)
                //        //{

                //        //}
                //        //else
                //        //{
                //        SocketManger.SendOne(userMessage, token);
                //        //}
                //    }
                //}
            }
            else
            {
                await HttpContext.Response.WriteAsync("我不处理");
            }
        }