服务器到服务器套接字IO消息
Server to server Socket IO messaging
上下文:
- Node.js使用
require("socket.io");
运行服务器 - Node.js使用
require("socket.io-client");
运行另一台服务器 - 使用标准时接收确认(来自其他服务器):
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;
相关文章:
- 大气:服务器收到消息
- 如何在服务器控制台上打印前端日志消息
- 如何将错误消息从 meteor 服务器传递到客户端
- 服务器无法从客户端获取消息
- io.sockets.mit未向服务器发送消息
- 如何使用angular js在表单上显示服务器端验证错误消息
- 流星消息格式服务器端翻译
- php函数向XMPP服务器发送消息,不提供日志;不起作用
- 在从websocket服务器推送消息后更新$scope变量
- 实时接收来自服务器的消息(数据库-MySQL,前端-Angularjs)
- Nodejs-websocket:如何在没有服务器响应的情况下连续发送客户端消息
- 如何只在收到服务器的回复消息后显示DIV
- 正在读取angularjs中的HTTP服务器标头响应消息
- C#/ASP-web,ASP:在客户端执行复选框消息框,如果是,则运行服务器端代码
- 服务器错误消息的正确正则表达式
- 在服务器上压缩JSON消息,在客户端解压缩
- 返回并重新加载页面时显示不需要的服务器端警报消息
- Apache Web 服务器消息
- Nodejs,客户端并不总是接收服务器消息
- 向客户端广播Javascript Websocket服务器消息