NodeJS套接字有时工作

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

只是,我遇到了一个奇怪的问题,就是我的sockets有时只听。

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

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::"); 

如果我刷新页面,每隔几次,它会突然find大约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> 

有什么我做错了,套接字似乎失去连接,并抛出一些错误?

更新:我离开服务器运行更长时间,并在我的控制台中popup更多的错误消息:

 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(); }); }); 

要小心使用连接必须小心,以确保它们始终被释放,并且做特别是当处理错误时有点繁琐,只要在做任务时有一些查询要做。

在某些情况下,您可能希望使用承诺来简化操作。 这里有一篇关于使用绑定promise来减轻node.js数据库查询的博客文章。