使用node.js,我一直在网上搜索创建一个简单的客户端-服务器模型的方法,在该模型中,客户端请求登录验证,同时以json发送信息。我看过很多关于这个过程的文章和文档,但我看到的每个客户端-服务器模型都是这样的:
服务器:
const WebSocket = require('ws');
// Set up server
const wss = new WebSocket.Server({ port: 8080 });
// Wire up some logic for the connection event (when a client connects)
wss.on('connection', function connection(ws) {
// Wire up logic for the message event (when a client sends something)
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
// Send a message
ws.send('Hello client!');
});
客户端:
// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');
// Connection opened
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
// Listen for messages
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});
代码来自:Node.js中的客户端-服务器通信(upthecreck的示例(
在上面的示例中,您将在客户端和服务器之间来回发送消息,但如果我想将json发送为";消息";(用户名和密码(从客户端到服务器?我如何让服务器知道:json对象实际上是登录信息?(从我在示例中看到的情况来看,这个websocket模块中只有"message"类型(我熟悉阻塞样式,在这种样式中,我会在客户端/服务器之间发送消息并等待响应。类似这样的东西:
理想服务器:
const WebSocket = require('ws');
// Set up server
const wss = new WebSocket.Server({ port: 8080 });
// Wire up some logic for the connection event (when a client connects)
wss.on('connection', function connection(ws) {
// Wire up logic for the message event (when a client sends something)
ws.on('message', function incoming(message) {
if (message) == "login"{ // if login was sent as the message type
ws.on("credentials" , function check_credentials(json){ //wait on the user and password (blocking)
//check credentials against database and update client
})
}
});
// Send a message
ws.send('Hello client!');
});
正如您所看到的,服务器会阻塞并等待用户的凭据与数据库匹配。我知道这可能不是一个工作的例子,只是目标。不散列和加密密码是个坏主意,但这只是为了理解目的。提前谢谢。
有些库可以为您做到这一点,但最简单的方法(imo(是在消息中使用事件说明符。
客户端
// do login
ws.send(JSON.stringify({t: 'login', username: 'username', password: 'password'}));
服务器
ws.on('message', function(message) {
let data;
try {
data = JSON.parse(message);
} catch {
return;
}
switch(data.t) {
case 'login': {
// handle login and save state somewhere
break;
}
case 'otherevent': {
// Handle some other event
break;
}
}
});