【问题标题】:How do I display to the user when the nodeJS server is reachable using socketIO?当使用 socketIO 可以访问 nodeJS 服务器时,如何向用户显示?
【发布时间】:2015-08-11 21:47:11
【问题描述】:

我正在制作一个网络应用程序,当服务器可访问时向用户显示,以便他们可以发布数据。目前它适用于我正在使用的代码,但是当另一个用户连接/断开连接时我遇到问题,它直接影响另一个连接的客户端。

NodeJS 代码:

io.on('connection', function(socket) {
    console.log('Connected');
    io.emit('Connect');

    socket.on('disconnect', function () {
        console.log('Connection Lost');
        io.emit('disconnect');
    });
});

HTML 代码:

     socket.on('disconnect', function(){
              $('#connection').html('disconnected');
              document.getElementById(id = 'save_button').style.display = "none"
              document.getElementById(id = 'not_save_button').style.display = "block"
          });

          socket.on('Connect',function() {
            $('#connection').html('connected');
            document.getElementById(id = 'save_button').style.display = "block"
            document.getElementById(id = 'not_save_button').style.display = "none"
          });

所以基本上我试图让每个页面只听服务器。它目前仅适用于一个客户端,但是当您向系统添加任何其他内容时,它就无法运行。

我已经尝试过套接字 ID,但是当服务器重新连接时这些会更新,所以我找不到使这些工作的方法。

【问题讨论】:

    标签: javascript node.js html socket.io


    【解决方案1】:

    Server.emit 函数将消息发送给所有客户端。要发送到特定客户端,请使用相关套接字的Socket.emit 方法。在你的情况下:

    io.on('connection', function(socket) {
      console.log('Connected');
      socket.emit('Connect');
    
      socket.on('disconnect', function () {
        console.log('Connection Lost');
    });
    

    【讨论】:

    • 当我关闭第二页时,服务器会崩溃。
    • @onemillion - 抱歉,我没有注意到代码实际在做什么。在断开连接的套接字上发射是没有意义的,这可能就是你的服务器崩溃的原因。删除了那部分。你想在这样的事件上发出什么?
    • 我试图向用户表明服务器已断开连接,这就是我在断开连接时发出的原因。
    • @onemillion - 你不需要任何服务器代码,正如我之前写的,你将无法在断开连接的套接字上从服务器发出任何东西。监听断开事件的客户端代码应该足够了。事实上,你可能也不需要在连接上发出任何东西,客户端应该能够在本地识别它(使用on('connect')
    • @onemillion - 你为什么不断改变你接受的答案?你对我的“不满意”吗?
    【解决方案2】:
    io.on('connection', function(socket) {
    
        console.log('Connected');
        socket.emit('Connect');
    
    });
    
    io.on('disconnect', function () {
        console.log('Connection Lost');
        socket.emit('disconnect');
    });
    

    使用 Amit 的答案,我设法找到了解决方案。

    【讨论】:

    • 这就是你最终使用的吗?它有效吗?它看起来像不完整且可能引发异常的代码
    • 是的,这就是我目前在代码中使用的内容,它可以按我的意愿工作,没有任何例外。
    • socket(你在...上调用emit)在断开连接处理程序中指的是什么?它没有在您的片段中定义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多