输入变量,用于连接到指定的socket.io服务器。

问题描述 投票:0回答:1

我正在做一个基于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();
        }
    });

})

If anyone could help that'd be amazing

javascript node.js socket.io client
1个回答
0
投票

你在这里碰到了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);
    });
}

学习很多关于回调、承诺和Javascript的async await的知识是你未来的目标。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.