何时可以将套接字客户端断开

请看下面的代码。 这是nodeJS中的一个简单的程序。 问题是为什么disconnect不打印? (如果你取消setTimeout注释,问题就消失了)真正的问题是什么?为什么我不能一起启动socketIO客户端和服务器,并在连接之后立即closures套接字? 什么是与socketIO连接的技术?

 "use strict"; var Promise = require("bluebird"); var socketio = require("socket.io"); var socketio_client = require("socket.io-client"); var http = require("http"); var port = 7457; var hostandport = "http://localhost:" + port.toString(); var server = socketio.listen(port); var client = socketio_client(hostandport); server.sockets.on("connect", function (socket) { console.log("connect"); socket.on("disconnect", function () { console.log("disconnect"); }); //setTimeout(function() { client.disconnect(); //}, 1000); }); 

您错误地设置了您的服务器,而不是:

 var server = require('http').createServer(handler); var io = require('socket.io')(server); io.on("connect", function (socket) { console.log("connect"); socket.on("disconnect", function () { console.log("disconnect"); }); //More importantly, you have done this part wrong, //the rest of your code may be functional, //but it does not adhere to what socket.io sets out in its own API //(http://socket.io/docs/) socket.disconnect(); }); 

在Socket.io中没有服务器端和/或浏览器端的连接。 只有一个连接。 如果其中一方封闭,则封闭。 所以你可以使用socket.disconnect()从Serverclosures它

 var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); setTimeout(function() { socket.disconnect(); }, 1000); }); 

转到http://socket.io/get-started/chat/获取更多的说明。