【问题标题】:How do I properly emit data to server from client using Node.js?如何使用 Node.js 从客户端正确向服务器发送数据?
【发布时间】:2017-07-25 01:32:56
【问题描述】:

当客户端连接到服务器时,应该向控制台发出一条消息。我没有收到任何错误,所以我对我的问题到底是什么感到困惑。

服务器: 如您所见,客户端已连接。
客户:该消息未出现在控制台中。
(请原谅我的链接,我没有 10 声望)

如何将消息打印到控制台?

我读过类似这篇的其他帖子,但它们没有帮助:(

【问题讨论】:

  • 这里关于代码的问题必须包括粘贴到问题中的相关代码,并且格式适当以便于阅读。允许使用外部链接,但不能作为对代码的唯一引用,因为外部链接会随着时间的推移而改变或消失,从而使问题无法作为长期搜索参考(这是堆栈溢出任务的重要组成部分)。而且,代码永远不应该作为图像包含,始终作为格式正确的文本。
  • 代码应该作为文本粘贴到您的问题中,而不是作为图像。图片不能复制,也不能搜索。

标签: javascript node.js server client emit


【解决方案1】:

当您执行io.connect() 时,该调用是异步的而不是立即的。在客户端生成connect 事件之前,您不能立即向服务器发出:

 var socket = io.connect()
 socket.on('connect', function() {
     // it is safe to call `.emit()` here
     socket.emit("sndMsg", someData);
 });

【讨论】:

  • @Darkauro - 如果您在问题中包含更多代码作为文本(而不是图像),那么我们可能会知道如何进一步提供帮助。您是否检查了客户端和服务器中的控制台是否有错误?直接从堆栈溢出帮助中心,您应该包括一个Minimal, Complete and Verifiable 您的问题示例。除其他外,这意味着我们可能需要重现问题的一切。
  • 谢谢。这帮助了很多。在发射之前等待客户端连接是我遇到的一个问题。修复后,我也意识到我将 io.connect 设置为错误的 url。抱歉帖子质量低,我真的是新人,下次一定要遵守指南:)
【解决方案2】:

index.html

<html>
    <head>
        <script src='/socket.io/socket.io.js'></script>
        <script>
            var socket = io();

            socket.on('welcome', function(data) {
                addMessage(data.message);

                // Respond with a message including this clients' id sent from the server
                socket.emit('i am client', {data: 'foo!', id: data.id});
            });
            socket.on('time', function(data) {
                addMessage(data.time);
            });
            socket.on('error', console.error.bind(console));
            socket.on('message', console.log.bind(console));

            function addMessage(message) {
                var text = document.createTextNode(message),
                    el = document.createElement('li'),
                    messages = document.getElementById('messages');

                el.appendChild(text);
                messages.appendChild(el);
            }
        </script>
    </head>
    <body>
        <ul id='messages'></ul>
    </body>
</html>

server.js

var http = require('http'),
    fs = require('fs'),
    // NEVER use a Sync function except at start-up!
    index = fs.readFileSync(__dirname + '/index.html');

// Send index.html to all requests
var app = http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(index);
});

// Socket.io server listens to our app
var io = require('socket.io').listen(app);

// Send current time to all connected clients
function sendTime() {
    io.emit('time', { time: new Date().toJSON() });
}

// Send current time every 10 secs
setInterval(sendTime, 10000);

// Emit welcome message on connection
io.on('connection', function(socket) {
    // Use socket to communicate with this particular client only, sending it it's own id
    socket.emit('welcome', { message: 'Welcome!', id: socket.id });

    socket.on('i am client', console.log);
});

app.listen(3000);

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 2016-12-12
    • 2023-03-08
    • 2013-05-01
    • 2017-09-23
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多