[英]Input variable for connecting to a specified socket.io server
所以我正在制作一個基於 Socket.io 的應用程序,我正在啟動我的應用程序並要求服務器 ip 作為輸入變量連接,但我似乎無法弄清楚如何讓它工作。 這是代碼:
const chalk = require('chalk').constructor({ enabled: true, level: 3 });;
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question(`Please type in Server CURL/IP\n\n `, (serverip) => {
id = serverip;
var socket = io(serverip);
});
var id = "";
var buffer = "";
function chat(){
rl.question(chalk.magenta("» "), (answer) => {
buffer = `${chalk.cyan(id)} : ${chalk.blue(answer)}`;
socket.emit("message", buffer);
chat();
});
}
socket.on('connect', () => {
rl.question(`What is your name?\n\n `, (answer) => {
socket.emit("message", `${chalk.green(answer)} has joined the chat`);
id = answer;
chat();
});
socket.on('msg', function(data){
if(buffer!=data){
console.log("\n" + data);
chat();
}
});
})
如果有人可以提供幫助,那就太棒了
您在這里遇到了 Javascript 的異步特性。 readline.question()
立即返回。 當您的用戶完成回答其問題時,它會調用其回調。 因此,您的兩條var socket = io()
行中的第二條,即提及server
的一條,在定義server
之前運行。
您必須在readline.question()
的回調中做更多的工作,而在外層做更少的工作。
編輯我會盡力為您指明正確的方向。 不過,您確實需要閱讀 Javascript 以及回調如何對其控制流至關重要。
這不是,重復不是,調試。
rl.question(`Please type in Server CURL/IP\n\n `, (serverip) => {
/* only in the this callback function you have access to socket */
var socket = io(serverip);
/* use socket here to set up your operations. */
socket.on('connect', () => {
rl.question(`What is your name?\n\n `, (answer) => {
socket.emit("message", `${chalk.green(answer)} has joined the chat`);
id = answer;
chat(socket);
});
});
socket.on('msg', function(data){
if(buffer!=data){
console.log("\n" + data);
chat(socket);
}
});
});
/* you can use socket in a function defined at the top level
* if you pass it to that function as a parameter
*/
function chat(socket) {
rl.question(chalk.magenta("» "), (answer) => {
buffer = `${chalk.cyan(id)} : ${chalk.blue(answer)}`;
socket.emit("message", buffer);
chat(socket);
});
}
學習很多關於回調、promise 和 Javascript 的 async / await 是你的未來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.