2013-02-08 21 views
3

我以一種非常基本的方式修改了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),但我接受其他建議。

+0

您使用快車3? – soyuka 2013-02-08 20:31:12

+0

@soyuka顯然不是。根據package.json似乎是版本2.4.6。我會把這個放在我的問題中。值得更新模塊嗎? – guypursey 2013-02-08 20:34:36

+0

此鏈接幫助我:http://psitsmike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/ – soyuka 2013-02-08 21:36:37

回答

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 

休息你可以計算出: 客戶端 - >插座 - >服務器 - > SOCKET2 - >服務器2

更新:socket.io客戶端是一個單獨的軟件包,需要安裝的這工作。在這裏看到:https://npmjs.org/package/socket.io-client

只要做到這一點,安裝npm install socket.io-client

+0

當你說那裏時,我不確定我是否理解你是錯誤的。我給出的'emit'代碼實際上是有效的。它幾乎是從Michael Mukhin的教程中逐字記錄下來的,我剛剛添加了幾行代碼來介紹聊天機器人(這幾乎就像一個echobot)。我試過了關於需要'socket.io-client'的提示,但它給了我一個錯誤。我會再看看這個。 – guypursey 2013-02-10 18:26:09

+1

沒有語義錯誤,但邏輯,sockets.emit只發送給連接的用戶,但io.sockets.emit廣播到所有連接的客戶端(我認爲這是一對一的聊天)。你得到什麼樣的錯誤? socket.io-client是一個必須通過npm安裝的軟件包。它與socket.io是分開的。這裏是npm頁面:https://npmjs.org/package/socket.io-client – user568109 2013-02-11 06:25:25

+0

這是我主要感興趣的一對一聊天,但教程中的代碼允許更多(我測試過它與三個用戶)。我會看看你提到的邏輯,因爲它可能會幫助我更清楚地理解發生的事情。至於錯誤:它說它找不到'socket.io-client'。我不知道它可以單獨安裝;我在socket.io的'node_modules'文件夾中看到了這個模塊,並嘗試了各種方法來實現它,例如'。\ socket.io \ node_modules \ socket.io-client'。我會嘗試按照您的建議安裝並回報。 Thx年齡患者反應。 – guypursey 2013-02-11 09:50:50

相關問題