何时可以将套接字客户端断开
请看下面的代码。 这是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); });