服务器上的socket.io-client连接到另一台服务器

时间:2016-04-18 23:41:54

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

所以我一直致力于设置冗余服务器而不会出现单点故障。我一直在寻找很多方法,我已经决定在每台服务器上使用socket.io-client来处理在2台服务器之间来回传递消息以获取冗余数据。但是,无论我做什么,我都无法让服务器连接到其他服务器。我甚至废弃了我的整个项目,开始了一个新项目,使用极其简单的代码,仍然无法让2彼此交谈。我在SO上看到过这样的多个问题,但是没有一个问题解决了我的问题,所以我决定询问并提供我可笑的简单设置的代码示例,看看是否有人能够理解为什么它没有连接。我告诉你,如果我还没剃过头,我现在就会把头发撕掉。所以,这是我的简单代码,它不起作用....

SERVER 1

"use strict";
const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const ioClient = require('socket.io-client');


app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

var client = ioClient('10.0.0.234:3000');
client.on('connect', () => {
  console.log('connected to server');
});

io.on('connection', (socket) => {
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

http.listen(3000, () => {
  console.log('listening on *:3000');
});

服务器2 - 完全相同的除了行...

var client = ioClient('10.211.55.7:3000');

将其指向其他服务器。这些都在我的本地网络上,并且它们都在同一时间运行。我甚至在每个服务器上放置一个客户端页面,其中包含一个简单的连接字符串,一个连接到同一台机器上的服务器,另一个连接到另一台机器上的服务器,就像这样......

客户端1(10.0.0.234机器):

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  var socket = io("10.0.0.234:3000");
  socket.on('connect', function() {
      console.log('connected to main server');
  })
  $('form').submit(function(){
    socket.emit('chat message', $('#m').val());
    $('#m').val('');
    return false;
  });
  socket.on('chat message', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
</script>

客户端2(10.211.55.7机器) - 除了连接线之外完全相同...

var socket = io('10.211.55.7:3000');

两个客户端都可以工作,并且可以连接到他们的服务器。我甚至在客户端上切换了IP地址,以便机器10.0.0.234的客户端正在使用...

var socket = io('10.211.55.7:3000');

它完美连接。因此,每个客户端都可以连接到任一服务器,并且它可以正常工作,但无论我做什么,我都无法让服务器记录连接到服务器的服务器&#39;一部分。

说真的,我在这里失去理智吗? socket.io-client中是否存在一些随机错误,它不允许服务器连接到另一台服务器,即使它正在运行socket.io作为客户端?我非常......非常......困惑,烦恼,厌倦,殴打...以及你能想到的所有其他形容词。 万一有人需要它,这是我在两台服务器上运行的package.json文件......

...的package.json

{
  "name": "simple-socket",
  "version": "0.0.1",
  "description": "socket server to socket server test",
  "dependencies": {
    "express": "4.10.2",
    "socket.io": "1.2.0",
    "socket.io-client": "^1.4.5"
  }
}

我知道在node.js中还有其他处理冗余备份的方法,实际的服务器运行sticky-session,cluster,redis,socket.io-redis等等要复杂得多。我刚刚创建了一个简单的示例(实际上只是使用socket.io聊天示例作为基础)来尝试让两个服务器相互通信。无论如何,它实际上从未实际连接到其他服务器。然而,不知何故,两个客户端都可以连接到任一服务器,只是服务器不会连接到其他服务器。谢谢你们所有的帮助,我为这里的小说道歉,我只想尽力提供所有的信息。没有什么比试图帮助那些在信息方面没有给你任何东西,甚至不做基础研究的人更烦人的事。

这是一个console.log(客户端);紧跟在&#34; var client = ioClient之后(&#39; 10.0.0.234:3000&#39;);

Socket {
  io: 
   Manager {
     nsps: { '/': [Circular] },
     subs: [ [Object], [Object], [Object] ],
     opts: 
     { path: '/socket.io',
        hostname: '10.0.0.234',
        secure: false,
        port: '3333' },
     _reconnection: true,
     _reconnectionAttempts: Infinity,
     _reconnectionDelay: 1000,
     _reconnectionDelayMax: 5000,
     _randomizationFactor: 0.5,
     backoff: Backoff { ms: 1000, max: 5000, factor: 2, jitter: 0.5, attempts: 0 },
     _timeout: 20000,
     readyState: 'opening',
     uri: 'http://10.0.0.234:3333',
    connecting: [ [Circular] ],
    lastPing: null,
     encoding: false,
     packetBuffer: [],
     encoder: Encoder {},
     decoder: Decoder { reconstructor: null },
     autoConnect: true,
     engine: 
      Socket {
        secure: false,
        agent: false,
        hostname: '10.0.0.234',
        port: '3333',
        query: {},
        upgrade: true,
        path: '/socket.io/',
        forceJSONP: false,
        jsonp: true,
        forceBase64: false,
        enablesXDR: false,
        timestampParam: 't',
        timestampRequests: undefined,
        transports: [Object],
        readyState: 'opening',
        writeBuffer: [],
        policyPort: 843,
        rememberUpgrade: false,
        binaryType: null,
        onlyBinaryUpgrades: undefined,
        perMessageDeflate: [Object],
        pfx: null,
        key: null,
        passphrase: null,
        cert: null,
        ca: null,
        ciphers: null,
        rejectUnauthorized: null,
        transport: [Object],
       _callbacks: [Object] },
     skipReconnect: false,
     _callbacks: { '$open': [Object], '$packet': [Object], '$close': [Object] } },
  nsp: '/',
  json: [Circular],
  ids: 0,
  acks: {},
  receiveBuffer: [],
  sendBuffer: [],
  connected: false,
  disconnected: true,
  subs: 
   [ { destroy: [Function] },
     { destroy: [Function] },
     { destroy: [Function] } ],
 _callbacks: 
   { '$connecting': [ [Function: onConnecting] ],
     '$connect': [ [Function] ] } }

0 个答案:

没有答案