gpt4 book ai didi

javascript - 服务器到服务器 Socket IO 消息传递

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:39 25 4
gpt4 key购买 nike

上下文:

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

io.on("connection", function() { console.log("已连接。"); });

问题:

不幸的是,我无法在任一服务器上获取客户端两者都运行客户端和服务器socket.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();
<小时/>

关于套接字的旁注

我相信您只需登录和游戏服务器之间的 1 个流就可以完成您想做的事情。这里仅使用 1 个服务器和 1 个客户端重做代码,执行相同的操作:

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;

关于javascript - 服务器到服务器 Socket IO 消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com