2016-02-04 241 views
1

我有一個非常基本的設置與socket.io但我無法讓我的服務器發送回消息,一旦建立連接。socket.io不發送事件從服務器到客戶端連接

當連接建立到我的服務器時,我希望服務器發回消息給客戶端。我試着用下面的代碼來實現:

服務器

// Modules 
var fs = require('fs'); 
var https = require('https'); 

// Certificate 
var options = { 
    pfx: fs.readFileSync('<my cert>') 
}; 


// Create Server 
httpsServer = https.createServer(options); 

// Create websocket 
var io = require('socket.io')(httpsServer); 

// Listen on a port 
httpsServer.listen(4000,function() { 
    console.log('listening on *:4000'); 
}); 

io.on('connection', function(socket) { 
    console.log('a user connected'); 
    socket.emit('test','you connected'); 
}); 

客戶

var socket = io('https://<my server>:4000'); 

當我執行這個代碼,網頁套接字被建立,我的服務器控制檯顯示消息"a user connected"。但是,消息['test','you connected']不會通過套接字發出。

我一直能夠得到這個工作的唯一方法是使用setTimeout()等待500毫秒才發出事件,在這種情況下,它的工作。

這是爲什麼?如何配置我的服務器,以便在用戶連接後立即自動回覆消息?

+0

檢查我的答案,讓我知道,它的工作完全沒有給我。 –

+0

你的客戶端代碼是什麼樣的? – usandfriends

回答

0

你要聽發出的事件,使用socket.on(event, callback);

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 

<script> 
    var socket = io('https://localhost:4000'); 
    //test is the emitted event. 
    socket.on("test", function(data){ 
     console.log(data); //"you connected" 
    }); 
</script> 
+0

嗨馬科斯,我會接受答案,因爲它確實有效,但我想知道你是否可以進一步解釋。對於這個測試事件,是的,它會在我的客戶端觸發回調。但是這些數據並沒有真正顯示在websocket流量中。隨後發出的「測試」事件顯示在websocket流量中。這是爲什麼?試圖瞭解發生了什麼。 – skokenes

+0

今晚,當我回家的時候,我會試着給你更詳細的解釋。 –

相關問題