2011-10-14 148 views
2

我試圖在socket.io谷歌組上詢問這一點,但沒有人可以(或不想)幫助我。socket.io實現一個簡單的聊天

我有這一段代碼在服務器端:

var chat = io 
    .of('/chat') 
    .on('connection', function (socket) { 
    socket.emit('message', { 
     that: 'only' 
     , '/chat': 'will get' 
    }); 
    }); 

chat.on("message", function(data){ 
    console.log(data); 
}); 

儘管在客戶端我有這樣的代碼:

var chat = io.connect('http://localhost/chat'); 

    chat.on('message', function (data) { 
    chat.emit('hi!'); 
    }); 

    chat.emit("message", {"this": "is a message"}); 

在控制檯I可以看到,從所述第一消息服務器被髮送,但它看起來像客戶端,一旦連接並收到消息,不會發出'hi!'消息。此外,我希望客戶也發出另一條消息,即我粘貼的最後一行。另外這個消息不被服務器接收(理論上它應該記錄它)。

我一定在做錯事,誰能指出這到底發生了什麼? 我最終想要實現的只是建立一個簡單的類似聊天的系統,但我希望這些東西(頻道)在實際編寫聊天本身之前工作。由於

回答

1

之所以認爲它不 「喜」 是未發送是因爲.emit中的第一個參數是事件名稱,其中在這裏是「hi」。從技術上講,如果你在服務器端下面,我想你應該得到一個未定義的數據(因爲你沒有把任何東西作爲要發送的對象,第二個參數):

.on('hi',function(data){ 
    console.log(data) // should log "undefined" 
}); 

你也可以使用.send這與網絡套接字語義相似,併發送到message事件。如果您在客戶端將.emit更改爲.send,它應該可以工作。

總結:

.emit('eventName', 'data') // sends to the eventName name 
.send('data') // sends to message event 

工作客戶端代碼:

var chat = io.connect('http://localhost/chat'); 

    chat.on('message', function (data) { 
    chat.send('hi!'); 
    }); 

    chat.emit("message", {"this": "is a message"}); 
1

我簡單化下來一點點,但是:

服務器:

var io = require('socket.io').listen(8080); 

var chat = io 
    .of('/chat') 
    .on('connection', function (socket) { 
    socket.send('welcome to the interwebs'); 
    socket.on('message', function(data) { 
     console.log(data); 
    }); 
    }); 

客戶:

<html> 
<body> 
<script src="http://10.120.28.201:8080/socket.io/socket.io.js"></script> 
<script type="text/javascript"> 
var chat = io.connect('http://10.120.28.201:8080/chat'); 

    chat.on('connect', function() { 
    console.log("connected"); 
    chat.send('hi!'); 
    chat.on('message', function (data) { 
     console.log(data); 
    }); 
    }); 

</script> 
</body> 
</html>