Skip to content

Commit 73f1bf0

Browse files
committed
fix: initialize NetworksService in renderer process
Reduce about `1100 ~ 1200` `TIME_WAIT` connections to about `20 ~ 30`
1 parent 6558669 commit 73f1bf0

4 files changed

Lines changed: 34 additions & 14 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { BehaviorSubject } from 'rxjs'
2+
import { NetworkWithID } from 'types/network'
3+
4+
export default class NetworkSwitchSubject {
5+
static subject = new BehaviorSubject<undefined | NetworkWithID>(undefined)
6+
7+
static getSubject() {
8+
return this.subject
9+
}
10+
}

packages/neuron-wallet/src/services/networks.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
import Core from '@nervosnetwork/ckb-sdk-core'
22
import { v4 as uuid } from 'uuid'
3-
import { BehaviorSubject } from 'rxjs'
4-
import { LackOfDefaultNetwork, DefaultNetworkUnremovable } from 'exceptions/network'
3+
import { DefaultNetworkUnremovable, LackOfDefaultNetwork } from 'exceptions/network'
54

65
import Store from 'models/store'
76

87
import { Validate, Required } from 'decorators'
98
import { UsedName, NetworkNotFound, InvalidFormat } from 'exceptions'
109
import { NetworkListSubject, CurrentNetworkIDSubject } from 'models/subjects/networks'
1110
import { MAINNET_GENESIS_HASH, EMPTY_GENESIS_HASH, NetworkID, NetworkName, NetworkRemote, NetworksKey, NetworkType, Network, NetworkWithID } from 'types/network'
11+
import { remote } from 'electron'
12+
import NetworkSwitchSubject from 'models/subjects/network-switch-subject'
1213

13-
export const networkSwitchSubject = new BehaviorSubject<undefined | NetworkWithID>(undefined)
14+
const isRenderer = process && process.type === 'renderer'
15+
const networkSwitchSubject = isRenderer
16+
? remote.require('./models/subjects/network-switch-subject').default.getSubject()
17+
: NetworkSwitchSubject.getSubject()
18+
19+
const currentNetworkIDSubject = isRenderer
20+
? remote.require('./models/subjects/networks').default.CurrentNetworkIDSubject
21+
: CurrentNetworkIDSubject
22+
23+
const networkListSubject = isRenderer
24+
? remote.require('./models/subjects/networks').default.NetworkListSubject
25+
: NetworkListSubject
1426

1527
const presetNetworks: { selected: string, networks: NetworkWithID[] } = {
1628
selected: 'mainnet',
@@ -40,20 +52,20 @@ export default class NetworksService extends Store {
4052
super('networks', 'index.json', JSON.stringify(presetNetworks))
4153

4254
const currentNetworkList = this.getAll()
43-
NetworkListSubject.next({ currentNetworkList })
55+
networkListSubject.next({ currentNetworkList })
4456

4557
const currentNetwork = this.getCurrent()
4658
if (currentNetwork) {
4759
if (currentNetwork.type !== NetworkType.Default) {
4860
this.update(currentNetwork.id, {}) // Update to trigger chain/genesis hash refresh
4961
}
5062

51-
CurrentNetworkIDSubject.next({ currentNetworkID: currentNetwork.id })
63+
currentNetworkIDSubject.next({ currentNetworkID: currentNetwork.id })
5264
networkSwitchSubject.next(currentNetwork)
5365
}
5466

5567
this.on(NetworksKey.List, async (_, currentNetworkList: NetworkWithID[] = []) => {
56-
NetworkListSubject.next({ currentNetworkList })
68+
networkListSubject.next({ currentNetworkList })
5769

5870
const currentID = this.getCurrentID()
5971
if (currentNetworkList.find(network => network.id === currentID)) {
@@ -72,7 +84,7 @@ export default class NetworksService extends Store {
7284
if (!currentNetwork) {
7385
throw new NetworkNotFound(currentNetworkID)
7486
}
75-
CurrentNetworkIDSubject.next({ currentNetworkID })
87+
currentNetworkIDSubject.next({ currentNetworkID })
7688
networkSwitchSubject.next(currentNetwork)
7789
})
7890
}
@@ -158,7 +170,7 @@ export default class NetworksService extends Store {
158170
this.updateAll(list)
159171

160172
if (this.getCurrentID() === id) {
161-
CurrentNetworkIDSubject.next({ currentNetworkID: id })
173+
currentNetworkIDSubject.next({ currentNetworkID: id })
162174
networkSwitchSubject.next(network)
163175
}
164176
}

packages/neuron-wallet/src/startup/sync-block-task/create.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { BrowserWindow } from 'electron'
22
import { ReplaySubject } from 'rxjs'
33
import path from 'path'
4-
import { networkSwitchSubject } from 'services/networks'
54
import { NetworkWithID } from 'types/network'
65
import env from 'env'
76
import AddressService from 'services/addresses'
@@ -14,6 +13,7 @@ import NetworksService from 'services/networks'
1413
import { distinctUntilChanged } from 'rxjs/operators'
1514
import LockUtils from 'models/lock-utils'
1615
import DaoUtils from 'models/dao-utils'
16+
import NetworkSwitchSubject from 'models/subjects/network-switch-subject'
1717

1818
export { genesisBlockHash }
1919

@@ -55,7 +55,7 @@ const networkChange = async (network: NetworkWithID) => {
5555

5656
export const databaseInitSubject = new ReplaySubject<DatabaseInitParams>(1)
5757

58-
networkSwitchSubject.subscribe(async (network: NetworkWithID | undefined) => {
58+
NetworkSwitchSubject.getSubject().subscribe(async (network: NetworkWithID | undefined) => {
5959
if (network) {
6060
await networkChange(network)
6161
}
@@ -77,8 +77,6 @@ NodeService
7777

7878
const loadURL = `file://${path.join(__dirname, 'index.html')}`
7979

80-
export { networkSwitchSubject }
81-
8280
let syncBlockBackgroundWindow: BrowserWindow | null
8381

8482
// create a background task to sync transactions

packages/neuron-wallet/src/startup/sync-block-task/params.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import { AddressesUsedSubject } from 'models/subjects/addresses-used-subject'
33
import AddressDbChangedSubject from 'models/subjects/address-db-changed-subject'
44
import WalletCreatedSubject from 'models/subjects/wallet-created-subject'
55
import AddressCreatedSubject from 'models/subjects/address-created-subject'
6-
7-
export { networkSwitchSubject } from 'services/networks'
6+
import NetworkSwitchSubject from 'models/subjects/network-switch-subject'
87

98
export { genesisBlockHash } from './create'
109
export { databaseInitSubject } from './create'
@@ -14,3 +13,4 @@ export const addressesUsedSubject = AddressesUsedSubject.getSubject()
1413
export const addressDbChangedSubject = AddressDbChangedSubject.getSubject()
1514
export const walletCreatedSubject = WalletCreatedSubject.getSubject()
1615
export const addressCreatedSubject = AddressCreatedSubject.getSubject()
16+
export const networkSwitchSubject = NetworkSwitchSubject.getSubject()

0 commit comments

Comments
 (0)