【问题标题】:socket.emit on sever side is ignored after connection?连接后忽略服务器端的socket.emit?
【发布时间】:2018-09-19 17:17:33
【问题描述】:

我正在尝试使我的代码功能,以便在 io 连接上,我有一个 socket.emit 之后,它将一个变量从我的 server.js 保存到 client.js

奇怪的是,当我在学校的台式电脑上工作时,代码运行得非常好,但是一旦我将文件传输到我的家庭桌面,代码就无法正常运行

从我的应用程序运行代码时,client.js 上的 console.log 不会出现

相关代码:

server.js

var http = require('http').Server(app); 
var path = require('path');  
var io = require('socket.io')(http);
var userLog = io.of('/logged');
userLog.on('connect', function(socket) {
// Send current user to client
socket.emit('saveUser', ({user:currentUser}))
console.log(currentUser + ' has connected');
}

client.js:

$(document).ready(function() {

   var me;
   socket.on('saveUser', function(data) {
    console.log(data)
    console.log(data[0])
    me = data.user;
    console.log("i am " + me);
   })
}

home.ejs

<script src="./socket.io/socket.io.js"></script>
<script>var socket = io('/logged');</script>
<script src="js/jquery.min.js"></script>
<script src="js/client.js"></script>

【问题讨论】:

    标签: javascript jquery node.js socket.io


    【解决方案1】:

    socket.on('saveUser', ...)移到$(document).ready()之外,并在建立socket.io连接后立即放置。

    如果'saveUser' 消息在文档准备好之前到达,当消息到达时您将不会安装事件处理程序,您会错过它。

    【讨论】:

    • 嘿!感谢您的建议,将 socket.on('saveUser',..) 移到 $(document).ready() 函数之外就可以了。另外,您知道为什么在其他计算机上没有发生错误吗?
    • @Jacky - 这是一个竞争条件(时间敏感)。如果 socket.io 连接在文档完成加载之前完成,则会出现问题。因此,文件加载时间或 socket.io 连接时间的变化都可能导致问题发生或不发生。
    猜你喜欢
    • 2020-02-11
    • 2017-05-10
    • 2017-05-09
    • 1970-01-01
    • 2012-12-27
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多