3

我以非常基本的方式修改了一个简单聊天教程中的一些代码,这样我就有一个 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),但我愿意接受其他建议。

4

1 回答 1

4

您的代码中有一些错误。一个应该使用

io.sockets.on('connection', function (socket) {
socket.on('updatechat', function(data) {
...
sockets.emit('User',{'user': 'login'});
sockets.emit('User',{'data': data});
});
});

使用 socket.emit 而不是 io.sockets.emit。io.sockets.emit 将发送给所有客户端。此外,您不能从服务器上的客户端删除同一行!!!,请使用以下命令从节点连接到另一台服务器。

var ioc = require('socket.io-client');         //ioc
var socket2 = ioc.connect('server2:8080');   //socket2

休息你可以弄清楚:客户端->套接字->服务器->套接字2->服务器2

更新:socket.io-client 是一个单独的包,需要安装它才能工作。见这里:https ://npmjs.org/package/socket.io-client

只需执行此操作即可安装npm install socket.io-client

于 2013-02-08T21:49:56.533 回答