使两个插座连接相互通信

时间:2015-03-06 12:44:36

标签: node.js sockets ember.js express

这是场景......

我正在开发一个我有想法的应用程序,我正在使用快速后端在ember中构建它。我正在使用express-ws所以我可以在里面运行ws websocket包更好。我无法与快递合作。

我的应用程序将有两个人连接到两个不同的网址连接的网址,这样他们就可以向服务器发送和接收信息,而不会让对方获得它。至少就是我想到的方式。

我想要的是当一个用户通过套接字进行交互时,该套接字将消息发送到另一个套接字以执行操作并将其发送给连接在其上的用户。

我希望这是有道理的。有了express-ws,到目前为止,我已经完成了基本的工作。

var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);

app.use(function (req, res, next) {
  console.log('middleware');
  req.testing = 'testing';
  return next();
});

app.get('/', function(req, res, next){
    console.log('browser connected');
  res.send('welcome to the api browser');
});

app.ws('/', function(ws, req) {
  console.log('socket connected');
  var object = {
    message: 'welcome to the socket api',
    time: Date.now().toString()
  }
  ws.send(JSON.stringify(object));
});

app.listen(1337);

我还没有建立另一个连接,但暂时它会是相同的,但当一个连接上的用户向其套接字发送某个消息时,我希望该套接字执行某些操作然后通过一些数据到另一个套接字,以便它可以向用户发送一些信息。

1 个答案:

答案 0 :(得分:1)

这可能会让您了解如何存储引用以供以后使用:



var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);

// array to hold the connections
var openChannels = [];

app.use(function(req, res, next) {
  console.log('middleware');
  req.testing = 'testing';
  return next();
});

app.get('/', function(req, res, next) {
  console.log('browser connected');
  res.send('welcome to the api browser');
});

app.ws('/', function(ws, req) {
  console.log('socket connected');

  // store connection for later reference
  openChannels.push(ws);

  // @todo: remove from array on disconnect

  // set broadcast callback
  ws.onmessage = function(msg) {
    openChannels.forEach(function(index, item) {
      if (item !== ws) { // make sure we're not sending to ourselves
        item.send(msg);
      }
    });
  };

  var object = {
    message: 'welcome to the socket api',
    time: Date.now().toString()
  }
  ws.send(JSON.stringify(object));
});

app.listen(1337);