【问题标题】:Why does the Socket Server stops working?为什么 Socket 服务器停止工作?
【发布时间】:2014-06-02 05:50:04
【问题描述】:

我正在为在线游戏创建一个 WebSocket。我有一些代码可以完美运行,但是一段时间后服务器停止了 Socket。我不知道什么可能是错的,我没有错误或什么的。它只是停止运行。

有人知道这段代码有什么问题吗?

var mysql = require('mysql');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var cookies;

var db = mysql.createConnection({
    host: 'hostname',
    user: 'username',
    password: 'password',
    database: 'database',
    port: 3306
});
db.connect(function(err){
    if (err) console.log(err)
        });

function createCookie(name,value,days, socket) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    socket.handshake.headers['cookie'] = name+"="+value+expires+"; path=/";
}

function readCookie(name, socket) {
    var nameEQ = name + "=";
    var ca = socket.handshake.headers['cookie'].split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name, socket) {
    createCookie(name,"",-1, socket);
}

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
    socket.on('chat message', function(msg){
        if(readCookie('uid', socket) != null) {
            db.query('SELECT * FROM ww_user_settings WHERE usr_set_id = '+readCookie('uid', socket)+' AND usr_set_setting_id = 23').on('result', function(data){console.log('Message from '+data.usr_set_value+': '+msg);io.emit('chat message', data.usr_set_value+": "+msg);});
        }
        else {
            console.log('Unauthorized message sent.');
            socket.disconnect('unauthorized');
        }
    });
});

http.listen(44444, function(){
    console.log('listening on *:44444');
});

正如我所说,Socket 可以工作。但过了一段时间,即使没有什么特别的事情发生,Socket 也会停止在我的 Windows 2012 Server 上运行。

【问题讨论】:

  • 你能给我们socket.io的日志吗? io.set('日志级别', 5);也许它有什么问题会更明显。

标签: node.js sockets socket.io


【解决方案1】:

这里的问题是服务器失去了与 MySQL 服务器的连接。失去它,它将停止工作。

【讨论】:

  • 你确定可以测试吗?注意你应该使用准备好的语句。
  • 是的。我不得不使用自动重新连接的数据库池。服务器现在继续运行。
猜你喜欢
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2021-11-23
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多