重新启动 socket.io 服务器的正确方法

ble*_*ted 3 node.js express socket.io

我正在尝试重新启动 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)
Run Code Online (Sandbox Code Playgroud)

ble*_*ted 5

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

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

该选项的描述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,
                //////////////////////////////
                // 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)
Run Code Online (Sandbox Code Playgroud)