繁体   English   中英

在客户端上处理Node.js服务器重启

[英]Handling Node.js server restart on the client

我正在使用带有socket.ioNode.js后端构建一个多人纸牌游戏,用于双向客户端 - 服务器通信。

我已经到了项目的最后阶段,我需要为服务器崩溃添加一些故障保护程序(无论它们可能发生的原因)。 所以,我正在使用PM2( 这里Git )来保持服务器进程活着,也就是说,每当它崩溃时自动重启它。 只要重新启动服务器(并重新加载实时游戏数据,这是另一个故事),这样可以正常工作。 但是,我无法将服务器崩溃与当前连接的客户端进行通信。

例如,当客户端连接到游戏室并且服务器崩溃时,即使服务器重新启动,单击要播放的卡也不再执行任何操作。 所以访问者不知道发生了什么。 以下是我的一些想法,但我一直在不同的墙上:

1)当服务器崩溃时,向所有连接的客户端发出消息以告知他们。 但是,由于服务器已重新启动,因此没有任何客户端实际连接到它,因此此时客户端列表为空。

2)当客户端尝试向服务器发送数据(例如播放卡片)时,检查服务器是否在线,如果没有则告诉他们。 我尝试使用以下代码来检查是否定义了io对象(socket.io的连接对象),但它始终返回true:

var isIOLoaded = function(){
    return (typeof(io) != "undefined") ? true : false;
}

我认为这是重启前的前一个服务器实例的io对象。

底线 - 客户端需要有一种方法来检查它们是否仍然连接到服务器,如果没有,请尝试再次连接。 我怎么能做到这一点?

您可以在客户端上使用socket.on('disconnect', function () {})来检测服务器何时不响应。

socket.io也支持自动重新连接,因此您可以在客户端上使用socket.on('connect', function () {}}来检测客户端何时恢复连接,并开发逻辑来恢复客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM