繁体   English   中英

NodeJS套接字有时工作

[英]NodeJS Sockets Sometimes Working

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

只是,我遇到了一个特殊的问题,因为我的插座有时只听。

起初没有错误消息,只有偶然我让页面运行,我得到了这个错误。

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次平铺点击,然后它就会停止工作。 我的数据库正在更新,直到套接字基本消失。

这是我在地图中发送坐标的地方:

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来使这更容易。 这是一篇关于使用绑定的promises来简化node.js中的数据库查询的博客文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM