javascript - NodeJS 套接字有时工作

标签 javascript node.js sockets

所以,我有一个 Node 服务器,运行 expressjs io(使用 socket.io),并且我正在构建一个网格 map 来跟踪数据库中的坐标。

只是,我遇到了一个奇怪的问题,因为我的套接字有时只听。

起初没有任何错误信息,只是偶然让页面运行才出现这个错误。

Uncaught TypeError: Cannot call method '0' of undefined UkPS99A_w96Ae0K570Nt?t=1395276358213&i=0:1

当我点击文件 UkPS99A_w96Ae0K570Nt?t=1395276358213&i=0:1 时,我得到了这个代码:

io.j[0]("8::");

如果我刷新页面,每隔几次它就会突然工作找到大约 10 次磁贴点击,然后它停止工作。我的数据库正在正确更新,直到套接字基本消失。

这是我在 map 中发送坐标的位置:

io.emit("move", {x:this.x,y:this.y});

服务器监听:

app.io.route('move', function(req) {
    con.getConnection(function(err){
        if (err) console.log("Get Connection Error.. "+err);
        //removed query because redundant
        req.io.emit("talk", {x:req.data.x,y:req.data.y});
    });
});

和我的套接字脚本:

io.on("talk",function(data) {
    console.log(data.x,data.y);
});

我的脚本包括按以下顺序位于页面底部:

<script src="socket.io/socket.io.js"></script>
<script>io = io.connect();</script> <!-- open the socket so the other scripts can use it -->
<script src="../js/sock.js"></script>
<script src="../js/map.js"></script>

是不是我做错了什么导致套接字似乎失去连接并抛出某种错误?

更新:我让服务器运行的时间更长,控制台中弹出了更多错误消息:

Uncaught TypeError: Cannot call method 'close' of null socket.io.js:1967
Uncaught TypeError: Cannot call method 'close' of null socket.io.js:1967
Uncaught TypeError: Cannot call method 'onClose' of null 

更多更新:更改连接线并将正确的 CORS 添加到我的 server.js

io = io.connect('http://sourceundead.com', {resource : 'socket.io'});

还是一样的问题。

最佳答案

您似乎有连接损耗,因为您从未将它们释放到池中。

假设 con 是您的池的(错误)名称,而不是

app.io.route('move', function(req) {
    con.getConnection(function(err){
        if (err) console.log("Get Connection Error.. "+err);
        //removed query because redundant
        req.io.emit("talk", {x:req.data.x,y:req.data.y});
    });
});

你应该有类似的东西

app.io.route('move', function(req) {
    con.getConnection(function(err, connection){
        if (err) console.log("Get Connection Error.. "+err);
        //removed query because redundant
        req.io.emit("talk", {x:req.data.x,y:req.data.y});
        connection.release();
    });
});

请注意,必须小心使用连接以确保它们始终被释放,这样做有点乏味,尤其是当您有一些查询要处理错误时做任务。

在某些时候,您可能希望使用 promises 来简化这件事。这是一篇关于 using bound promises to ease database querying in node.js 的博文.

关于javascript - NodeJS 套接字有时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521329/

相关文章:

javascript - 如何使用 Jquery/Ajax 调用将数据显示为表格?

javascript - 数组foreach困惑

javascript - 使用 react 调用api的正确方法

javascript - 以编程方式删除按钮上的事件监听器

mysql - PhpMyAdmin 不会生成正确的 JSON 导出文件吗?在 Unix 上用什么替换 ^M 字符?

node.js - 错误: Cannot find module './is-buffer'

node.js - 如何在 Node.js 中包含一个不是模块的文件(使其成为一个模块)?

c++ - Qt TCP 套接字 - 写入超过 15 个字节

我可以在主应用程序和多个线程中使用相同的套接字吗?

c# - Socket EndReceive 命令/数据问题