服务器到服务器套接字IO消息

Server to server Socket IO messaging

本文关键字:服务器 消息 IO 套接字      更新时间:2023-09-26

上下文:

  1. Node.js使用require("socket.io");运行服务器
  2. Node.js使用require("socket.io-client");运行另一台服务器
  3. 使用标准时接收确认(来自其他服务器):

io.on("connection", function() { console.log("Something connected."); });

问题:

不幸的是,我无法在任何一台服务器上获得CLIENT;serversocket.io向另一方的服务器发送消息。

我意识到这可能是一个代码错误,所以为了正确起见,我会把它包括在内,但为了记录在案,我想知道我是否在语义上做错了什么,而不是在代码方面。

代码:(LoginServer.js)

var app = require('http').createServer();
var io = require('socket.io')(app);
var ioc = require("socket.io-client");
var LoginServer = (function() {
    function LoginServer() {
        this.gameServerSocket = ioc.connect("http://localhost:3031", {reconnect: true});
    }
    LoginServer.prototype.initialize = function() {
        var self = this;
        io.listen(3032);
        io.on("connection", function(socket) {
            socket.emit("connection");
        });
        this.gameServerSocket.on("connection", function() {
            console.log("Game Server Connected!");
            self.gameServerSocket.emit("login", {accountName: "default"});
        });
    }
    return LoginServer;
})();
exports.LoginServer = LoginServer;

代码:(GameServer.js)

var app = require('http').createServer();
var io = require('socket.io')(app);
var ioc = require("socket.io-client");
var GameServer = (function() {
    function GameServer() {
        this.loginServerSocket = ioc.connect("http://localhost:3032", {reconnect: true});
        this.loginServerSocket.emit("connection");
    }
    GameServer.prototype.initialize = function() {
        var self = this;
        io.listen(3031);
        io.on("connection", function(socket) {
            socket.emit("connection");
        });
        this.LoginServerResponses();
    }
    GameServer.prototype.LoginServerResponses = function() {
        var self = this;
        this.loginServerSocket.on("connection", function() {
            console.log("Login Server Connected!");
        });
        this.loginServerSocket.on("login", function(data) {
            console.log("Login Server:", data);
        });
    }
    return GameServer;
})();
exports.GameServer = GameServer;

在做了更多的测试后,我意识到您的代码运行良好也许您对模块的调用不正确?我用这个作为我的index.js,两个服务器-客户端对连接良好:

// index.js
var GameServer = require('./GameServer.js').GameServer;
var LoginServer = require('./LoginServer.js').LoginServer;
var lserver = new LoginServer();
var gserver = new GameServer();
lserver.initialize();
gserver.initialize();

插座上的旁注

我相信您只需在登录服务器和游戏服务器之间使用一个流就可以完成您想要做的事情。这里只使用一个服务器和一个做同样事情的客户端来重做代码:

GameServer.js:

var http = require('http');
var io = require('socket.io');
function GameServer() { }
GameServer.prototype.initialize = function() {
    var self = this;
    self.httpServer = http.createServer();
    self.ioServer = io(self.httpServer);
    self.ioServer.listen(3031);
    self.ioServer.on("connection", function(socket) {
        socket.emit("connection");
    });
    this.LoginServerResponses();
}
GameServer.prototype.LoginServerResponses = function() {
    var self = this;
    this.ioServer.on("connection", function() {
        console.log("Login Server Connected!");
    });
    this.ioServer.on("login", function(data) {
        console.log("Login Server:", data);
    });
}
exports.GameServer = GameServer;

登录服务器js:

var ioc = require("socket.io-client");
function LoginServer() {
    this.gameServerSocket = ioc.connect("http://localhost:3031", {reconnect: true});
}
LoginServer.prototype.initialize = function() {
    var self = this;
    self.gameServerSocket.on("connection", function() {
        self.gameServerSocket.emit("connection");
    });
    this.gameServerSocket.on("connection", function() {
        console.log("Game Server Connected!");
        self.gameServerSocket.emit("login", {accountName: "default"});
    });
}
return LoginServer;
exports.LoginServer = LoginServer;

"不幸的是,我无法在任何一台服务器上获得CLIENT,这两台服务器都在运行客户端和服务器套接字。io向另一台服务器的服务器发送消息。"

您真正想要做的是1台服务器,并允许客户端连接。

服务器可以与客户端通信,客户端与服务器也可以来回通信。

server.js

var app = require('http').createServer();
var io = require('socket.io')(app);
io.listen(3032);
io.on('connection', function(socket) {
    console.log('A user(a client) connected!');
    // lets welcome this particular client with a nice msg :)
    socket.emit('msg group', 'Welcome client! you can emit msgs for me to tell every client in "to everyone please"');
    // lets tell everyone someone joined
    io.emit('msg group', 'guys someone special joined :)!');
    socket.on('to everyone please', function(freedomMsg) {
        io.emit('msg group', "a client told me (the server) to send this to everyone (every clients)!: " + freedomMsg);
    });
});

aClient.js

var ioc = require("socket.io-client");
var socket = ioc("http://localhost:3032");
// general chat
socket.on('msg group', function(msg) {
    console.log(msg);
});
function msgEveryone(message) {
    socket.emit('to everyone please', message);
}
msgEveryone('whats up guys?');

我希望你能更多地了解socket.io(或通常的套接字)的工作原理:)

代码:(GameServer.js)

首先删除这些代码:

this.loginServerSocket.on("login", function(data) {
    console.log("Login Server:", data);
});

第二个更改代码:

GameServer.prototype.initialize = function() {
    var self = this;
    io.listen(3031);
    io.on("connection", function(socket) {
        socket.emit("connection");
    });
    this.LoginServerResponses();
}

GameServer.prototype.initialize = function () {
    var self = this;
    io.listen(3031);
    io.on("connection", function (socket) {
        socket.emit("connection");
        socket.on("login", function (data) {
            console.log("Login Server:", data);
        });
    });
    this.LoginServerResponses();
}

试试这个:LoginServer.js

var app = require('http').createServer();
var io = require('socket.io')(app);
var ioc = require("socket.io-client");
var LoginServer = (function() {
function LoginServer() {
    this.gameServerSocket = ioc.connect("http://localhost:3031", {reconnect: true});
}
LoginServer.prototype.initialize = function() {
    var self = this;
    io.listen(3032);
    io.on("connection", function(socket) {
        // a client, maybe game server, is connected
        socket.on("login", function(data){ console.log("Credentials: "+ data); });
    });
    this.gameServerSocket.on("connect", function() {
        console.log("Connected to Game Server!");
        // Send event to game server
    });
}
    return LoginServer;
})();
exports.LoginServer = LoginServer;

GameServer.js

var app = require('http').createServer();
var io = require('socket.io')(app);
var ioc = require("socket.io-client");
var GameServer = (function() {
function GameServer() {
    this.loginServerSocket = ioc.connect("http://localhost:3032", {reconnect: true});
}
GameServer.prototype.initialize = function() {
    var self = this;
    io.listen(3031);
    io.on("connection", function(socket) {
        // a client, maybe login server, is connected
    });
    this.LoginServerResponses();
}
GameServer.prototype.LoginServerResponses = function() {
    var self = this;
    this.loginServerSocket.on("connect", function() {
        console.log("Connected to Login Server !");
        // Try to login
        self.loginServerSocket.emit("login", {accountName: "default"});
    });
}
return GameServer;
})();
exports.GameServer = GameServer;