我以一種非常基本的方式修改了simple chat tutorial中的一些代碼,這樣我就可以在NodeJS服務器上安裝一個JavaScript聊天機器人,當用戶輸入內容時,它立即向客戶機發送響應。兩臺Node服務器可以同時運行並進行交互,這樣一箇中介服務於客戶端嗎?
這是服務器的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));
});
所以機器人的反應有很大的聯繫了用戶的輸入。我現在想把bot放在不同的節點服務器上,以便聊天可以像用戶一樣傳遞和反應bot,並且bot可以獨立處理和行動。大致爲:
用戶(客戶端/瀏覽器)<--->
MEDIATOR(節點服務器1)<--->
聊天機器人(節點服務器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腳本。有沒有簡單的方法讓我的節點服務器與另一個節點服務器進行交互而不破壞客戶端庫?
更重要的是,是否有可能一次運行兩個節點服務器,並且有一箇中介可以在推送到客戶端之前傳遞和接收來自另一個節點的消息?我正在使用Express框架(v2.4.6)和socket.io(v0.8.4),但我接受其他建議。
您使用快車3? – soyuka 2013-02-08 20:31:12
@soyuka顯然不是。根據package.json似乎是版本2.4.6。我會把這個放在我的問題中。值得更新模塊嗎? – guypursey 2013-02-08 20:34:36
此鏈接幫助我:http://psitsmike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/ – soyuka 2013-02-08 21:36:37