Socket.IO - 客户端的 .on 方法无效

4
我有一些非常基本的使用socket.io的代码。
客户端
var socket = io();

// Do some stuff...

socket.emit('hello', 'please like me');

// Wait for a response
socket.on('hello back!', function(msg) {
    console.log('Yay, he replied:', msg);
});

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

io.on('connection', function(socket) {
    console.log('a user connected');

    socket.on('disconnect', function() {
        console.log('user disconnected');
    });

    socket.on('hello', function() {
        // Code to decide wether or not I like the client
        // ...
        // I do like the client!
        socket.emit('hello back!', 'how are you');
        console.log('I said hello back!');
    });
});

希望你已经看到了这张图片。理想情况下,应该是这样的:
  1. 客户端连接
  2. 一段时间后,客户端发出 hello 事件
  3. 服务器看到这个事件,返回 hello back! 事件
  4. 客户端注意到 hello back! 事件
  5. 每个人都很高兴!
但不幸的是,对我来说并非如此。相反,步骤1-3完美地工作。但当你达到第4和第5步时,事情开始崩溃。客户端从未记录任何关于 hello back! 事件之后的信息。
这不是我的全部代码,我认为这会让您更容易理解它。很可能我在某个地方犯了一些愚蠢的错误,也许没有包括在这个代码中。但如果我做错了什么,请告诉我。
谢谢

这段代码示例中似乎没有明显的错误,所以问题可能与你真正的代码有关,而这里并未显示。我建议将 socket.on('hello back!', ...) 移动到 socket.emit('hello', ...) 之前,这样你就可以确保在发送消息之前已经设置了响应的监听器,但这可能不是主要问题。 - jfriend00
@jfriend00 好的,非常感谢您的回复。 - troffaholic
1个回答

0

虽然这篇文章几年前的,但是如果未来有人碰巧遇到同样问题,我想让你们知道:

我的问题与我上面展示的代码无关,而是一个配置错误。

我将我的项目托管在 glitch.com 上,他们声称支持 websockets,但是出现错误是因为服务器无法连接到客户端(websocket 连接打开后客户端根本没有收到任何数据)。

这是我在 2018 年在 glitch.com 上遇到的一个错误,我知道其他人也遇到过。这似乎与通过域名和 SSL 连接的 websocket 有关,但我无法回忆起确切的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接