Javascript 服务器上的socket.io-client连接到另一台服务器
因此,我一直致力于在没有单点故障的情况下设置冗余服务器。我已经研究了很多方法,并决定在每台服务器上使用socket.io-client来处理在两台服务器之间来回传递冗余数据的消息。但是,无论我做什么,我都无法让服务器连接到另一台服务器。我甚至放弃了我的整个项目,开始了一个新的项目,使用了极其简单的代码,但仍然无法让2人互相交谈。我在SO上看到过多个类似的问题,但都没有解决我的问题,所以我决定询问并给出我可笑的简单设置的代码示例,看看是否有人能看到它为什么无法连接。我告诉你,如果我没有剃光头,我现在就要把头发扯下来了。所以,这里是我的简单代码,它不起作用 服务器1Javascript 服务器上的socket.io-client连接到另一台服务器,javascript,node.js,sockets,socket.io,server,Javascript,Node.js,Sockets,Socket.io,Server,因此,我一直致力于在没有单点故障的情况下设置冗余服务器。我已经研究了很多方法,并决定在每台服务器上使用socket.io-client来处理在两台服务器之间来回传递冗余数据的消息。但是,无论我做什么,我都无法让服务器连接到另一台服务器。我甚至放弃了我的整个项目,开始了一个新的项目,使用了极其简单的代码,但仍然无法让2人互相交谈。我在SO上看到过多个类似的问题,但都没有解决我的问题,所以我决定询问并给出我可笑的简单设置的代码示例,看看是否有人能看到它为什么无法连接。我告诉你,如果我没有剃光头,我现
"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计算机):
这两个客户端都可以工作,并且可以连接到它们的服务器。我甚至切换了客户端的IP地址,以便机器10.0.0.234的客户端使用
var socket = io('10.211.55.7:3000');
它完美地连接在一起。因此,每个客户机都可以连接到任意一台服务器,并且工作得很好,但无论我做什么,我都无法让服务器记录“连接到服务器”部分
说真的,我是不是疯了?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(client);就在“var client=ioClient('10.0.0.234:3000')之后
你确定你的服务器上安装了
socket.io客户端
库吗?我无法通过查看socket.io代码来证明这一点,但我认为ioClient()
构造函数需要一个实际的URL,而不仅仅是一个IP地址,比如var client=ioClient(
)http://10.0.0.234:3000');@jfriend00我也这么想,但在客户端代码中,它与ip一起工作。在客户端(html文件)中,它只是io('10.0.0.234:3000');您是否认为socket.io-client具有不同的连接模式?我没有尝试过,但我可以。此外,socket.io-client包含在package.json文件中,我运行了npm安装以确保所有库都已安装,然后我使用require('socket.io-client');我可以执行console.log(client)或console.log(ioClient)他们都注销了一个合适的socket io对象,所以包含了它。谢谢你的回复,而不是所有的讨论,你为什么不试试呢?只需添加http://并看看它是否有效。我以前就看到了这一点。@jfriend00我看到了,它不起作用。对不起,我只是想回复你,但是是的,我在前面添加了“http://”nt,但它不起作用。你确定服务器上安装了socket.io客户端
库吗?我无法通过查看socket.io代码来证明这一点,但我认为ioClient()
构造函数需要一个实际的URL,而不仅仅是一个IP地址,如var client=ioClient('http://10.0.0.234:3000');
@jfriend00我也这么想,但在客户端代码中,它与ip一起工作。在客户端(html文件)中,它只是io('10.0.0.234:3000');您是否认为socket.io-client具有不同的连接模式?我没有尝试过,但我可以。此外,socket.io-client包含在package.json文件中,我运行了npm安装以确保所有库都已安装,然后我使用require('socket.io-client');我可以执行console.log(client)或console.log(ioClient)他们都注销了一个合适的socket io对象,所以包含了它。谢谢你的回复,而不是所有的讨论,你为什么不试试呢?只需添加http://并看看它是否有效。我以前就看到了这一点。@jfriend00我看到了,它不起作用。对不起,我只是想回复你,但是是的,我在前面添加了“http://”但它不起作用。
var socket = io('10.211.55.7:3000');
{
"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"
}
}
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] ] } }