所以我一直致力于设置冗余服务器而不会出现单点故障。我一直在寻找很多方法,我已经决定在每台服务器上使用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] ] } }