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スクリプトにのみ属しているためです。クライアント側のライブラリをハッキングせずに、ノードサーバーを別のノードサーバーと対話させる簡単な方法はありますか?

より基本的には、2つのノードサーバーを同時に実行し、1つをメディエーターにして、クライアントにプッシュする前に別のサーバーとの間でメッセージを送受信することも可能ですか?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});
});
});

io.sockets.emitではなくsocket.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 に答える