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

时间:2014-05-16 15:56:37

标签: javascript node.js socket.io

我正在使用Node.js后端与socket.io构建多人纸牌游戏,以进行双向客户端 - 服务器通信。

我已经进入项目的最后阶段,我需要为服务器崩溃添加一些故障保护程序(无论它们可能发生的原因)。因此,我使用PM2(Git here)来保持服务器进程处于活动状态,即每当崩溃时自动重启它。只要重新启动服务器(并重新加载实时游戏数据,但这是另一个故事),这种方法很好。但是,我在将服务器崩溃与当前连接的客户端进行通信时遇到问题。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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