【问题标题】:Correct way to restart a socket.io server重新启动 socket.io 服务器的正确方法
【发布时间】:2015-10-16 06:01:01
【问题描述】:

我正在尝试重新启动 socket.io 服务器。我启动服务器并收到新连接的欢迎消息,但是当我关闭并重新启动服务器时,我没有收到进一步的欢迎消息。

希望我错过了一些简单的东西:\

var http = require('http').Server
var socketIO = require('socket.io')
var socketIOClient = require('socket.io-client')
var port   = 3000
var url = 'ws://localhost:' + port

function newServer(serverName, cb)
{
    var server = http().listen(port, function()
    {
        console.log(serverName, 'listening')
        var io = socketIO(server)

        var clientSocket = socketIOClient(url,
            { reconnection: false })

        clientSocket.on('connect', function()
        {
            // never get 'two connect'
            console.log(serverName, 'connect')
            io.close()
        })
        clientSocket.on('disconnect', function()
        {
            console.log(serverName, 'disconnect')
            cb()
        })
    })
}

function startServerOne(cb)
{
    newServer('one', cb)
}
function startServerTwo(cb)
{
    newServer('two', cb)
}

startServerOne(startServerTwo)

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    当您重新启动服务器时,您会终止所有连接。客户端应主动重新连接。

    你应该看看auto-reconnect configuration of client sockets

    【讨论】:

    • 我的目标是让旧客户端不重新连接,只是我在重新启动服务器后创建的新客户端。似乎服务器启动正常,但 socket.io 缺少“启动”方法或其他东西,因为它永远不会回来。
    • 新客户端或服务器的控制台有什么特别的吗?
    • 用于单元测试。我不希望以前测试的老客户仍然闲逛。理想情况下,每个测试都将针对新的服务器和 io,但我似乎无法使其正常工作。 socket.io tests 中的示例似乎没有做任何特别的事情..
    【解决方案2】:

    我正在寻找的参数是“forceNew”。它在 socket.io-client documentation 中没有记录。

    这似乎迫使 socket.io-client 创建一个新的管理器,而不是使用缓存的管理器(我假设它连接到不再运行的服务器)。

    该选项在socket.io blog 上进行了描述,并且可以在代码here 中看到并讨论问题here

    完整的工作示例:

    var http = require('http').Server
    var socketIO = require('socket.io')
    var socketIOClient = require('socket.io-client')
    var port   = 3000
    var url = 'ws://localhost:' + port
    
    function newServer(serverName, cb)
    {
        var server = http().listen(port, function()
        {
            console.log(serverName, 'listening')
            var io = socketIO(server)
    
            var clientSocket = socketIOClient(url,
                {
                    reconnection: false,
                    //////////////////////////////
                    // this forces a new connection!
                    forceNew: true
                    //////////////////////////////
                })
    
            clientSocket.on('connect', function()
            {
                // never get 'two connect'
                console.log(serverName, 'connect')
                io.close()
            })
            clientSocket.on('disconnect', function()
            {
                console.log(serverName, 'disconnect')
                cb()
            })
        })
    }
    
    function startServerOne(cb)
    {
        newServer('one', cb)
    }
    function startServerTwo()
    {
        newServer('two', function()
        {
            console.log('high five everyone')
        })
    }
    
    startServerOne(startServerTwo)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2011-04-21
      • 1970-01-01
      • 2018-10-30
      • 2018-01-29
      • 1970-01-01
      相关资源
      最近更新 更多