【问题标题】:socket.io-client connecting, but not emittingsocket.io-client 连接,但不发射
【发布时间】:2016-09-10 18:54:24
【问题描述】:

我正在使用 socket.io-client 和 socket.io 在终端中制作一个小型加密聊天应用程序。客户端能够连接到服务器,但在输入用户名时不会发出用户名。

客户:

 var socket = require('socket.io-client')('http://127.0.0.1:3000');
 socket.on('connect_error', function(){
console.log('Failed to establish a connection to the servers, or lost     connection');

 return process.exit();     
  });
 var prompt = require("prompt-sync")()
 var news = "Add news: Will be from database. " 
 var username = prompt("Username>: ")

 console.log("Hold on a sec, just checking that!")
 console.log("")
 if (typeof username === "defined"){
 socket.emit('user-name', {usr: 'username'})
 }


socket.on('user-name-good',function(socket){
console.log("Okay! Your username looks good, we just require your password")
console.log("If you chose to have no password, please press enter with    out pressing space!")
 var password = prompt("Password>: ")
  if (typeof password !== "defined"){
    console.log("Please provide a password!")
    return password = prompt("Username>: ")
 }

 socket.on('user-name-fail',function(socket){
 console.log("Sorry, we could not find, "+username+""+"Please register    on the website, or, if you have registered ")
 return process.exit()
})    

}
)

服务器代码,基于 socket.io 聊天示例中的代码:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});

http.listen(3000, function(){
console.log('listening on *:3000');
});

我添加了一个错误事件,如果与服务器的连接失败,这将关闭客户端,所以我知道它的连接,感谢任何帮助,我已经对此主题进行了研究,并尝试了很多其他方法,但是没用。

另外,连接是在您提交数据后建立的,而不是在客户端代码启动时建立的,这可能是什么原因造成的?

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    如果你想在客户端和服务器之间发送事件,你必须:

    从客户端发送事件 A 到服务器,服务器必须监听 A 事件。

    如果您想将事件 B 从服务器发送到客户端,则客户端必须监听事件 B。

    除了您代码中的所有其他内容外,我看不到您在哪里侦听客户端的“聊天消息”事件。

    Socket.io 基于这些所谓的“事件”。下面的代码将向服务器发送“my_event”事件,传输的数据将是对象 { a: 1 }。

    socket.emit('my_event', { a: 1 });
    

    如果我想在服务器上处理这个事件,我必须监听它:

    socket.on('my_event', function(data) {
        // data is the object { a: 1 }
        // do stuff..
    });
    

    【讨论】:

    • 我专注于登录,还没来得及聊天消息。
    • 如何使用从客户端发送到服务器的数据?比如,如果 (a === "foo"){console.log("a === "foo"}.
    • 在客户端写类似:socket.emit('eventA', 'foo');并在服务器端添加:socket.on('eventA', function(data){ console.log(data); });它将在服务器的控制台中显示“foo”字符串。试试看,你就会知道它是如何工作的。此外,如果您检查 typeof username === "defined" .. 它永远不会起作用,因为 typeof 关键字永远不会返回 'defined'。提示会为用户名变量分配一个字符串,因此您可以简单地检查: if(username){ // do stuff.. }
    • 完美!那解决了它。谢谢!
    猜你喜欢
    • 2023-03-18
    • 2017-07-22
    • 2014-05-09
    • 1970-01-01
    • 2016-09-04
    • 2015-04-06
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多