首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个套接字访问tcp套接字?

如何从另一个套接字访问tcp套接字?
EN

Stack Overflow用户
提问于 2015-07-28 07:48:00
回答 2查看 50关注 0票数 0

我有几个客户端连接,其中一个应该在另一个中侦听数据。我如何在它们之间架起一座桥梁(不是数组迭代器)?

示例伪码:

代码语言:javascript
复制
socket.on('data', function(chunk){
  decodeChunk(chunk.toString('hex'), function(response){
    if(response.name === 'toDB'){
      //write smth. to DB
    }

    if(response.name === 'readDB'){
      //watch all incoming tcp sockets with 'toDB' and continiously
      //send to client connected with this socket
    }

  });
})

我可以使用类似于rabbitMQ的东西,但为了保持开发的更敏捷,它并不适用于当前阶段。

如有任何建议请见谅。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 08:00:38

最后得到了这样的服务:

代码语言:javascript
复制
var SocketMedium = {
  sessions: {},
  onEvent: function (event, cb) {
    if (!this.sessions[event]) {
        this.sessions[event] = [];
        this.sessions[event].push(cb);
    } else {
        this.sessions[event].push(cb);
    }

    console.log('onEvent: ', event);
  },
  rTrigger: function (event, data) {
    console.log('Started rTrigger: ', event);
    if(this.sessions[event]){
        console.log('FOUND: ', event);
        this
        .sessions[event]
        .forEach(function (cb) {
            cb(data);
        })
    }
    console.log('Completed rTrigger', this.sessions);
  },
  cleaner: function(sessionId){

    var event = 'session' + sessionId;

    if (this.sessions[event]) {
        delete this.sessions[event];
        console.log('SocketMedium cleaned: ', this.sessions[event]);
    }

    console.log('SocketMedium can not find: ', this.sessions[event]);
  } 
};

module.exports = SocketMedium;
票数 0
EN

Stack Overflow用户

发布于 2015-07-28 08:50:45

用纯伪代码来解决这个问题有点棘手,但无论如何我还是要尝试一下。

如果我正确理解了这一点,那么toDB和readDB就是示例数据,并且有多个toDB。这意味着,您也会有一堆toXY和相应的readXY,或者一堆toPQ和相应的readPQ。如果是这样的话,那么一旦连接到toSOMETHING,您就可以将该套接字存储在readSOMETHING下。如果键已经存在,那么只需将toSOMETHING套接字附加到其中。迟早它会是这样的:

代码语言:javascript
复制
var socketData = {
    readDB: {
        sockets: [
            <socket-object-toDB-1>,
            <socket-object-toDB-2>,
            <socket-object-toDB-3>
        ]
    },
     readXY: {
        sockets: [
            <socket-object-toXY-1>,
            <socket-object-toXY-2>,
            <socket-object-toXY-3>
        ]
    }
}

然后你的伪代码可能看起来就像

代码语言:javascript
复制
socket.on('data', function(chunk){
  decodeChunk(chunk.toString('hex'), function(response){
    if(response.name === 'toDB'){
      //write smth. to DB
      if (socketData['readDB']) {
        // already exists, simply append incoming socket to it's sockets array
        socketData['readDB'].sockets.push(socket);
      } else {
        // does not exist, add it with a sockets array
        socketData['readDB'] = {
          sockets: [socket]
        }
    }

    if(response.name === 'readDB'){
      // Write to all sockets of readDB
      socketData['readDB'].sockets.forEach(function(sock) {
          sock.write('Whatever message\r\n');
      });
    }

  });
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31670325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档