簡體   English   中英

用於連接到指定 socket.io 服務器的輸入變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM