跨多个套接字连接的二进制流传输

时间:2016-11-09 13:54:46

标签: javascript node.js sockets websocket socket.io

我有一个用例,我需要从浏览器获取输入,通过套接字将其传递给我的节点服务器,然后将此输入发送到第三方网站,以便通过套接字再次处理。从第三方网站收到的结果需要发送回浏览器。

节点服务器



var express = require('express');
var app = express();
var server = require('http').createServer(app);
var socketIO = require('socket.io'),
  server, io;
var thirdPartSocketClient = require('socket.io-client');

//Custom imports
var thirdParty = require('./ms_socket.js');

var socket = socketIO(server);
socket.on('connection', function(client) {
  var token = null;
  //Token from third party site that we should have before sending the actual info
  thirdParty.getToken(function callback(returnToken) {
    token = returnToken;
  });
  thirdPartSocketClient = thirdParty.getTranslation(token);
  client.on('audio', function(data) {
    thirdPartSocketClient.emit(data);
  });
});

server.listen(8080, function() {
  console.log('Open http://localhost:8080 in your browser');
});




ms_socket.js



//Exported function making a socket call to third party service
var exports = module.exports = {};
var request = require('request');
var wsClient = require('socket.io-client');
var fs = require('fs');

exports.getToken = function(callback) {
  //send back the token
}

exports.getTranslation = function(accessToken) {

  var ws = new wsClient(thirdPartySocketURL);

  // event for connection failure
  ws.on('connectFailed', function(error) {
    console.log('Initial connection failed: ' + error.toString());
  });

  // event for connection succeed
  ws.on('connect', function(connection) {
    console.log('Websocket client connected');

    // process message that is returned
    //processMessage would process the incoming msg from third party service
    connection.on('message', processMessage);

    connection.on('close', function(reasonCode, description) {
      console.log('Connection closed: ' + reasonCode);
    });

    // print out the error
    connection.on('error', function(error) {
      console.log('Connection error: ' + error.toString());
    });

  });
  // connect to the service
  ws.connect(thirdPartySocketURL, null, null, {
    'Authorization': 'Bearer ' + accessToken
  });
  return ws;
}; //End of export function




我能够从浏览器接收数据,建立与第三方服务的连接(可以看到套接字连接)并发出数据。但我无法收到第三方服务的回复。 是因为节点没有收听我的第三方套接字事件吗? 不确定为什么它不起作用。 我在服务器上本地保存数据,读取文件然后发送,然后我从服务中得到回复。

如果这不是"对"如果我使用消息队列,你可以建议一个好的方法(如果是的话,请随意推荐一个)

由于

0 个答案:

没有答案