我想问你一个关于JavaScript套接字所面临的问题。 我希望服务器仅在接收到特定消息时才允许与客户端连接。
例如,服务器等待消息“ confirmed_user”以允许套接字连接。其他任何东西都必须被拒绝,服务器必须断开()连接。
我的客户端:
var express = require('express')
var app = express();
var http = require('http')
var server = http.createServer(app)
const io = require('socket.io-client');
//CASE 1 client send the message "confirmed_user"
socket = io.connect("http://localhost:3333/").emit('set', "confirmed_user",
function (response) {console.log(response);
});
//CASE 2 client send the message "blabla"
/* socket = io.connect("http://localhost:3333/").emit('set', "blabla",
function (response) {console.log(response);
});*/
//CASE 3 client don't send any message
/*socket = io.connect("http://localhost:3333/",
function (response) {console.log(response); });*/
服务器端...
io.on('connection', function (socket) {
socket.on('set', function (status, callback) {
if(status=='confirmed_user') {
console.log("new client connected!");
//server stuff | server stuff
socket.on('disconnect', function() {
console.log("a client disconnected");
}
}
else{
console.log("not authenticated USER")
socket.disconnect()
}
});
});
如果客户端发送任何消息(情况1和情况2),则上述方法可行,我唯一的问题是,如果客户端没有发送套接字客户端未断开连接的消息(情况3)(客户端没有访问权限到“服务器资料”,但连接仍然打开)。如果在此示例中客户端未在连接上发送任何消息,服务器还如何终止连接?谢谢
答案 0 :(得分:0)
socket = io.connect("http://localhost:3333/","",
function (response) {console.log(response); });
出于好奇,这样的事情行得通吗?如果第二个参数期望用户输入的是字符串,则将该字符串设置为空值将与用户通过聊天不发送任何内容相同。