6262c7a0bf
* Use fork instead of spawn We no longer do in-place updating so no need for the spawn. The advantage of a fork is that it preserves flags like --prof which you can use to profile code-server. Also I am not sure the comment about not being able to reload in place with fork was even true to begin with. * Refresh heartbeat patch Seems to have gotten out of date a little. * Propagate execArgv to extension host This will let us profile the extension host.
38 lines
1.8 KiB
Diff
38 lines
1.8 KiB
Diff
Add a heartbeat to web socket connections
|
|
|
|
This prevents them from being killed when they are idle. To test run behind
|
|
NGINX, make sure the sockets are idle (check dev tools), then wait 60+ seconds.
|
|
|
|
Index: code-server/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts
|
|
+++ code-server/lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts
|
|
@@ -7,6 +7,7 @@ import { VSBuffer } from 'vs/base/common
|
|
import { Emitter, Event } from 'vs/base/common/event';
|
|
import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle';
|
|
import { IIPCLogger, IMessagePassingProtocol, IPCClient } from 'vs/base/parts/ipc/common/ipc';
|
|
+import { isWeb } from 'vs/base/common/platform';
|
|
|
|
export const enum SocketDiagnosticsEventType {
|
|
Created = 'created',
|
|
@@ -829,6 +830,19 @@ export class PersistentProtocol implemen
|
|
this._socketDisposables.push(this._socketWriter);
|
|
this._socketReader = new ProtocolReader(this._socket);
|
|
this._socketDisposables.push(this._socketReader);
|
|
+ // Send empty messages to keep the socket alive. We only need this on the
|
|
+ // web where sockets can be killed by reverse proxies for inactivity.
|
|
+ if (isWeb) {
|
|
+ const timer = setInterval(() => {
|
|
+ const msg = new ProtocolMessage(ProtocolMessageType.None, 0, 0, getEmptyBuffer());
|
|
+ this._socketWriter.write(msg);
|
|
+ }, 45000); // NGINX has a 60 second default timeout so try 45 seconds.
|
|
+ this._socketDisposables.push({
|
|
+ dispose: () => {
|
|
+ clearInterval(timer);
|
|
+ },
|
|
+ });
|
|
+ }
|
|
this._socketDisposables.push(this._socketReader.onMessage(msg => this._receiveMessage(msg)));
|
|
this._socketDisposables.push(this._socket.onClose((e) => this._onSocketClose.fire(e)));
|
|
if (initialChunk) {
|