最近两天公司 要用到 WebSocket C#服务器端+Vue客户端
我之前做 WebSocket 是 C#服务器端 + 原生js客户端
原生js客户端 我用 iframe 将 WebSocket 用单独一个网页中。这个页不频繁刷新。这种做法一直没有问题
今天用 Vue客户端 来实现
Vue本身单页要 频繁刷新,当 刷新比较快时,
在网页中的websocket 的连接 始终是 Still in CONNECTING state 无论等多久都是这个状态。
这个问题 困扰了我很久。 一开始我认为是 Vue客户端 代码写的不对。其实不对。是C#服务器的问题
在这个函数中出错了
今天特意写出来,留个记念。
起初当我用 C#断点调试,则不再出错,每次刷新都能连接上。给了我启发。
在C#服务器端
注:这句 System.Threading.Thread.Sleep(100); 非常重要
如果网页不能在iframe中固定,需要刷新时(尤其是VUE这种单页不断刷新整页时) 线程等待100 毫秒 太短了,网页刷新后则不能再正确连接
解决方法: 将 100 改为 3000 在Vue上亲测没问题
#region WebSocket 监听 private void m_WebSocketDoListen() { try { Char char1 = Convert.ToChar(65533); this.WebSocketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); this.WebSocketListener.Bind(new IPEndPoint(this.IPV4, this.intWebSocketPort)); this.WebSocketListener.Listen(500);//ConnectionsQueueLength while (true) { Socket sc = this.WebSocketListener.Accept(); if (sc != null) { //System.Threading.Thread.Sleep(100);//这个线程 等待时间 太短了 System.Threading.Thread.Sleep(3000); clsWebSocket socketConn = new clsWebSocket(); socketConn.ConnectionSocket = sc; //socketConn.NewConnection += new NewConnectionEventHandler(socketConn_NewConnection); socketConn.LineReceived += new clsSocket.LineReceivedEventHandler(m_OnLineReceived);//收到消息 socketConn.LineReceivedError += new clsSocket.LineReceivedErrorEventHandler(m_OnLineReceivedError);//收到消息时出错 socketConn.Disconnected += new clsSocket.DisconnectedEventHandler(m_Disconnected);//WebSocket中客户端断开连接 socketConn.ConnectionSocket.BeginReceive(socketConn.receivedDataBuffer, 0, socketConn.receivedDataBuffer.Length, 0, new AsyncCallback(socketConn.ManageHandshake), socketConn.ConnectionSocket.Available);; } } } catch (Exception ex)// { myClass.clsLogHelper.m_CreateErrorLogTxt("WebScript StartServer", "出错", ex.Message.ToString()); } } #endregion
完整代码
https://www.cnblogs.com/hailexuexi/p/16854230.html
标签:WebSocket,服务器端,C#,socketConn,srcIndex,刷新,new,客户端 From: https://www.cnblogs.com/hailexuexi/p/16854341.html