admin管理员组文章数量:1393367
I’ve got my first websocket system set up and its working well but it is ignoring the reconnect delay and just doing it at 5000ms.
private static SocketIOClient.SocketIO _socket;
public static bool IsConnected => _isConnected;
private static bool _isConnected = false;
private static string _serverUrl = URLSettings.getServerName(APITargets.WS);
private static string _authToken = URLSettings.tennantAPIKey;
private static string _computerName = Environment.MachineName;
private static int _reconnectAttempts = 0;
private static readonly Random _random = new Random();
//Handle Websocket connection changes
public static event EventHandler<bool> ConnectionStatusChanged;
// Event Handlers
public static event EventHandler<dynamic> EventReceived_QudaDashboardUpdate;
public static event EventHandler<dynamic> EventReceived_QudaSettingsModelUpdate;
public static event EventHandler<dynamic> EventReceived_StaticSMSSettingsUpdate;
public static event EventHandler<dynamic> EventReceived_APIRequestReconnect;
public static event EventHandler<dynamic> EventReceived_HaloPayWarningUpdate;
public static event EventHandler<dynamic> EventReceived_SMSResponseUpdate;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_Quda;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_Cherub;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_HaloPay;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_DocLink;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_Webbit;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_HaloText;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_ZephyrClaims;
public static event EventHandler<dynamic> EventReceived_SubscriptionEvent;
public static event EventHandler<dynamic> EventReceived_DocLinkStatusUpdate;
static int randomDelay = _random.Next(5000, 20000);
public static async Task StartSocketIOListenerAsync()
{
if (_isConnected)
{
StreamLogger.Info("Socket.IO Listener is already running.");
return;
}
StreamLogger.Info("Initializing Socket.IO Connection...");
Console.WriteLine(randomDelay);
var options = new SocketIOOptions
{
Reconnection = true,
ReconnectionDelay = 10000,
ReconnectionAttempts = int.MaxValue,
RandomizationFactor = 0.5,
Transport = SocketIOClient.Transport.TransportProtocol.WebSocket,
ExtraHeaders = new Dictionary<string, string>
{
{ "X-Token", _authToken },
{ "X-Computer-Name", _computerName }
}
};
_socket = new SocketIOClient.SocketIO(_serverUrl, options);
_socket.OnConnected += (sender, e) =>
{
_isConnected = true;
_reconnectAttempts = 0; // Reset attempt counter on successful connection
ConnectionStatusChanged?.Invoke(null, true);
StreamLogger.Info("Socket.IO Connected.");
};
_socket.OnDisconnected += async (sender, e) =>
{
_isConnected = false;
ConnectionStatusChanged?.Invoke(null, false);
StreamLogger.Warning($"Socket.IO Disconnected: {e}");
//await ReconnectIfNeeded();
};
_socket.OnError += async (sender, e) =>
{
_isConnected = false;
ConnectionStatusChanged?.Invoke(null, false);
StreamLogger.Error($"Socket.IO Connection Error: {e}");
//await ReconnectIfNeeded();
};
SubscribeToEvents();
await _socket.ConnectAsync();
}
I’ve tried adding random delays between 5000-30000 but it always stays at 5.
I have about 2000 clients staying connected at a time, so if the server goes down and all 2000 try and reconnect I'm concerned there will be issues.
I’ve got my first websocket system set up and its working well but it is ignoring the reconnect delay and just doing it at 5000ms.
private static SocketIOClient.SocketIO _socket;
public static bool IsConnected => _isConnected;
private static bool _isConnected = false;
private static string _serverUrl = URLSettings.getServerName(APITargets.WS);
private static string _authToken = URLSettings.tennantAPIKey;
private static string _computerName = Environment.MachineName;
private static int _reconnectAttempts = 0;
private static readonly Random _random = new Random();
//Handle Websocket connection changes
public static event EventHandler<bool> ConnectionStatusChanged;
// Event Handlers
public static event EventHandler<dynamic> EventReceived_QudaDashboardUpdate;
public static event EventHandler<dynamic> EventReceived_QudaSettingsModelUpdate;
public static event EventHandler<dynamic> EventReceived_StaticSMSSettingsUpdate;
public static event EventHandler<dynamic> EventReceived_APIRequestReconnect;
public static event EventHandler<dynamic> EventReceived_HaloPayWarningUpdate;
public static event EventHandler<dynamic> EventReceived_SMSResponseUpdate;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_Quda;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_Cherub;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_HaloPay;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_DocLink;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_Webbit;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_HaloText;
public static event EventHandler<dynamic> EventReceived_SlackChatUpdate_ZephyrClaims;
public static event EventHandler<dynamic> EventReceived_SubscriptionEvent;
public static event EventHandler<dynamic> EventReceived_DocLinkStatusUpdate;
static int randomDelay = _random.Next(5000, 20000);
public static async Task StartSocketIOListenerAsync()
{
if (_isConnected)
{
StreamLogger.Info("Socket.IO Listener is already running.");
return;
}
StreamLogger.Info("Initializing Socket.IO Connection...");
Console.WriteLine(randomDelay);
var options = new SocketIOOptions
{
Reconnection = true,
ReconnectionDelay = 10000,
ReconnectionAttempts = int.MaxValue,
RandomizationFactor = 0.5,
Transport = SocketIOClient.Transport.TransportProtocol.WebSocket,
ExtraHeaders = new Dictionary<string, string>
{
{ "X-Token", _authToken },
{ "X-Computer-Name", _computerName }
}
};
_socket = new SocketIOClient.SocketIO(_serverUrl, options);
_socket.OnConnected += (sender, e) =>
{
_isConnected = true;
_reconnectAttempts = 0; // Reset attempt counter on successful connection
ConnectionStatusChanged?.Invoke(null, true);
StreamLogger.Info("Socket.IO Connected.");
};
_socket.OnDisconnected += async (sender, e) =>
{
_isConnected = false;
ConnectionStatusChanged?.Invoke(null, false);
StreamLogger.Warning($"Socket.IO Disconnected: {e}");
//await ReconnectIfNeeded();
};
_socket.OnError += async (sender, e) =>
{
_isConnected = false;
ConnectionStatusChanged?.Invoke(null, false);
StreamLogger.Error($"Socket.IO Connection Error: {e}");
//await ReconnectIfNeeded();
};
SubscribeToEvents();
await _socket.ConnectAsync();
}
I’ve tried adding random delays between 5000-30000 but it always stays at 5.
I have about 2000 clients staying connected at a time, so if the server goes down and all 2000 try and reconnect I'm concerned there will be issues.
Share Improve this question asked Mar 14 at 9:17 Glenn AngelGlenn Angel 11 bronze badge 3- You are not using randomDelay in the code. All you are doing is outputting the value. The delay is always set to ReconnectionDelay = 10000, A socket retries to connect up to 3 times at 5 seconds intervals and that may be why you are seeing a retry every 5 seconds. – jdweng Commented Mar 14 at 13:02
- Thanks @jdweng that was intentional in case it was having issues with the variable. It wasnt even waiting the 10 sec just 5 though. – Glenn Angel Commented Mar 15 at 11:04
- Websocket is using TCP for the transport method and there is a delay in TCP. See stackoverflow/questions/63675902/… – jdweng Commented Mar 15 at 11:14
1 Answer
Reset to default 0I found the answer which i wasnt aware of. There is a MaxReconnectionDelay which is default at 5 sec.
What was happening is that since my delay was random + 5sec, it would just default ot 5 sec.
I have changed the max delay to 45 seconds now (yes very long) and my random reconnect delay is set to between 5 and 45 secs. This is now working!!
本文标签: cSocketIO ignoring reconnectDelayStack Overflow
版权声明:本文标题:c# - SocketIO ignoring reconnectDelay - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744665334a2618495.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论