在不关闭套接字的情况下重启实时node.js服务器
Restarting a realtime node.js server without closing sockets?
我们有一小组使用node.js的多人服务器,目前在高峰使用期间每分钟大约处理100万条消息。是否有一种方法可以"优雅地"重新启动服务器而不会导致套接字下降?基本上,我想知道处理重启的最佳方法是什么,它通常会对玩家造成很大的干扰?
当一个进程退出时,操作系统通过关闭属于它的所有套接字来清理它们。因此,没有办法只做一个简单的服务器重启和保留您的套接字连接。
在某些操作系统中,您可以将套接字的所有权从一个进程传递给另一个进程,因此在技术上可能可行,您可以创建一个临时进程(可能是先前存在的父进程),将套接字的所有权传递给其他进程,重新启动服务器,然后将所有权转移回新启动的进程。我从未尝试过(或听说有人这样做),但这听起来可能是可行的。
这里有一些关于在node.js中使用child.send()
将套接字传输到子进程的信息。这似乎只能为由net
模块创建的node.js套接字完成,并且有一些关于这样做的警告,但这是可能的。
如果没有,通常的解决方法是让客户端在连接关闭时自动重新连接。如果操作得当,这对客户端来说是相当透明的(除了服务器没有运行的短暂时间)。
使用redis或一些内存数据库来存储连接,这样即使在服务器重启后也可以轻松地重新连接,而不会丢失任何会话或连接。如果适合你的话,试试这个。另外请注意,在重新启动连接可能会下降,但由于有持久性,你将很容易再次连接。socket.io-redis
相关文章:
- 如何在Javascript中定义一个简单的自动重启倒计时
- MDN文档中关于弄清楚XUL元素的段落是什么意思:“如何将覆盖扩展转换为无重启”
- 如何修复IE 9中的文档模式重启
- 卡斯珀/幻影崩溃并自动重启
- 新闻自动收报机 - 过早重启
- 游戏重启Javascript/Jquery
- 重启CSS3动画后's停止
- 我的功能无法重启的原因是什么?
- 如果扩展被禁用,firefox重启后无法重新启用该扩展
- Three.js在单页webapp中正确重启场景
- popcorn.js可以检测切换视频,无需重启即可继续
- HTML5视频无法重启
- HTML5视频javascript控件-重启视频
- Webpack不会在不重启服务器的情况下将更改捆绑到某些文件中
- nodemon,Nodeclipse不会在文件更改时自动重启
- JavaScript / jQuery:在最后一次迭代时重启for循环
- 更新文件时不需要重启Node.js中的服务器
- 谷歌浏览器,音频,setTimeout,替换音频src,重启中间音频
- Javascript在闭包内重启定时器
- 在不关闭套接字的情况下重启实时node.js服务器