热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

web3websocket连接可防止节点进程退出

如何解决《web3websocket连接可防止节点进程退出》经验,应该怎么办?

我有一个节点js进程,它创建一个web3 websocket连接,如下所示:

web3 = new Web3('ws://localhost:7545')

当进程完成时(我发送一个SIGTERM),它不会退出,而是永远挂起而没有控制台输出.

我注册了SIGINT和SIGTERM一个听众在什么处理过程中具有突出以观察process._getActiveRequests()process._getActiveHandles(),我看到以下内容:

 Socket {
    connecting: false,
    _hadError: false,
    _handle: 
     TCP {
       reading: true,
       owner: [Circular],
       onread: [Function: onread],
       onconnection: null,
       writeQueueSize: 0 },
    
    _peername: { address: '127.0.0.1', family: 'IPv4', port: 7545 },
    
}

为了完整性,这里是监听信号的代码:

async function stop() {
  console.log('Shutting down...')

  if (process.env.DEBUG) console.log(process._getActiveHandles())

  process.exit(0)
}

process.on('SIGTERM', async () => {
  console.log('Received SIGTERM')
  await stop()
})

process.on('SIGINT', async () => {
  console.log('Received SIGINT')
  await stop()
})

看起来web3正在打开一个套接字,这是有道理的,因为我从未告诉它关闭连接.通过文档和谷歌搜索,它看起来不像web3对象的close或end方法.

手动关闭stop上面的套接字允许进程成功退出:

web3.currentProvider.connection.close()

任何人都有更优雅或官方认可的解决方案?我觉得有必要手动执行此操作,而不是让对象在进程结束时自行销毁.其他客户端似乎自动执行此操作而未明确告知他们关闭其连接.也许告诉你的节点进程创建的所有客户端在关机时关闭他们的句柄/连接是更干净,但对我来说,这是意料之外的.


推荐阅读
author-avatar
流云清动_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有