我以非常基本的方式修改了一个简单聊天教程中的一些代码,这样我就有一个 JavaScript 聊天机器人,它位于 NodeJS 服务器上,当用户输入内容时,它会立即向客户端发送响应。
这是 NodeJS 服务器上代码的相关部分,它可以工作:
socket.on('sendchat', function (data) {
// we tell the client to execute 'updatechat' with 2 parameters
io.sockets.emit('updatechat', socket.username, data);
// we also tell the client to send the bot's response
io.sockets.emit('updatechat', 'BOT', bot.transform(data));
});
因此,机器人的响应与用户的输入密切相关。我现在想将机器人放在不同的节点服务器上,以便聊天可以像对待用户一样向机器人传递和做出反应,并且机器人可以独立处理和行动。大致:
USER(客户端/浏览器)<--->
MEDIATOR(节点服务器 1)<--->
CHAT BOT(节点服务器 2)
...
我已经尝试了在我看来是显而易见的事情(这显然也是错误的),这是从我的客户那里得到的:
var socket = io.connect('http://localhost:8080'); // 8080 being the port for the other server
我将它放入我的服务器端 js 文件中,如下所示:
var app = require('express').createServer();
var io = require('socket.io').listen(app);
app.listen(8080);
var socket = io.connect('http://localhost:8080');
但这会在节点控制台中产生一个错误,说该io
对象没有方法connect
。也许这是因为connect
只属于客户端的 JS 脚本。有没有一种简单的方法可以让我的 Node 服务器与另一个 Node 服务器交互而不会破坏客户端库?
更根本的是,是否有可能同时运行两个节点服务器并让一个作为中介在推送到客户端之前传递和接收来自另一个的消息?我正在使用 Express 框架 (v2.4.6) 和 socket.io (v0.8.4),但我愿意接受其他建议。