使用PHP和Socket.io实现通知系统

3

我正在尝试使用PHP和socket.io构建一个通知系统。思路是,客户端连接到socket.io并等待通知。PHP脚本通过另一个端口通过curl连接到socket.io,并发布更新事件,该事件传递给连接的客户端。客户端通过在连接事件后发送的消息中的ID进行标识。我存储与用户ID相关联的socket变量。一切正常,但是一段时间后脚本停止工作。似乎在存储在数组中的一段时间后停止了socket变量。以下是我的服务器代码。

var notification_port = 8001;
var oak_port          = 8002;

var io = require('socket.io').listen(notification_port);
var clients = new Array();

io.sockets.on("connection", function(socket){
   socket.on("__identification", function(message){
      if (message.id){
         console.log("user with session id " + message.id + " connected!");
         var sockets = clients[message.id];
         if (!sockets){
            sockets = new Array();
         }
         sockets.push(socket);
         clients[message.id] = sockets;
      }
   });
});

var url  = require('url');
var oakListener = require('http').createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});

  var url_parts = url.parse(req.url, true);
  var query = url_parts.query;

  var sockets = clients[query.id];
  if (sockets){
     for (var i = 0; i < sockets.length; i++){
        sockets[i].emit("notification", query);
      }
      res.end('ok');
  } else {
     res.end('failed');
  }
}).listen(oak_port);
2个回答

1

你需要像下面解释的那样添加一个断开连接的处理程序:

socket.on('disconnect', function () {
    //delete socket from sockets;
});

0
问题是,连接每隔一分钟就会丢失。您必须在“断开”函数中进行垃圾回收,并在“连接”函数中重新初始化连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接