Given that SignalR is a client / server connection solution, you cannot have any expectations of long open connections. So, as Kelso Sharp wrote in his answer, the only thing you can do is manage the communication life cycle events.
Check the documentation for all signalR connection lifecycle events: https://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#connectionlifetime
So, if we do not focus on how to make a permanent connection that will never work, we could focus on giving the user an idea of this, skillfully managing the shutdown, rebooting, etc. in the background.
Here is a diagram showing how I would configure this, even if you do not specify what causes your hub to output data to clients, but I get an image, it might be something like this diagram. The idea here is that you click the same state on some state provider, that is, on the cache, the web api repository, so that you have the whole set of available data at any given time. When ui boots or disconnects, it must send a request to this provider to restore the state, and then it must reconnect to the hub.
If data consistency is a problem, you can perform state versioning, save a local copy in ui, and then audit when reconnecting. Thus, you could see if you missed something, and in this case you will issue catch-up requests to the state provider.

To handle events, you simply use some functions on your client side: // this will cause all state changes during the connection loop:
$.connection.hub.stateChanged(function (change) { if (change.newState === $.signalR.connectionState.reconnecting) { console.log("liveFeed is reconnecting!"); } else if (change.newState === $.signalR.connectionState.connected) { console.log("liveFeed is connected!"); } });
// this works when disconnected from the hub.
$.connection.hub.disconnected(function () { console.log('Connection disconnected') });