2015-07-05 47 views
0

使用PHP和Unity3D對我的項目進行原型設計後,我決定使用Cordova和NodeJS構建生產版本。設置與NodeJS和Socket.IO的無狀態連接

我目前在NodeJS上使用Socket.io,並且對連接有些困惑。我曾預計這個工作的出路是以下過程:

  1. 客戶端將與請求
  2. 服務器將請求
  3. 的連接將被關閉
  4. 響應連接到服務器

但是,似乎連接喜歡保持打開,並且如果連接關閉,它會不斷嘗試重新連接,這不是我正在尋找的。我試圖建立一種單一的數據傳輸狀態,類似於當您向PHP文件發出網絡請求時發生的情況。

該項目的源代碼是相當多的樣板代碼:

var application = require('express')(); 
var http = require('http').Server(application); 
var server = require('socket.io')(http); 

http.listen(8080, function() { 
    console.log('Listening on *:8080'); 
}); 

server.on('connection', function(socket) { 
    console.log('SERVER: A new connection has been received.'); 
    server.on('disconnect', function() { 
     console.log('SERVER: A connection has been closed.'); 
    }); 
}); 

我並不需要一個持久連接,我也不想要一個。

想法:我可以發送客戶的密切握手。例如:

  1. 一些數據發送到服務器
  2. 收到來自服務器
  3. 一些數據發送到所述服務器的關閉請求/剛關閉套接字
  4. 繼續應用邏輯一旦插座被關閉

這是處理這個問題的正確方法嗎?然而,問題就出現了,如果數據丟失了,那麼就會有一個永久打開的套接字。在這種情況下實施基本超時是否理想? (IE:如果在10秒內未收到響應,則發生錯誤或服務器不可用)。

回答

0

不知道你爲什麼使用socket.io。套接字IO用於不同的目的,並不符合您的標準。我所看到的主要是它的實時應用程序和二進制streaming.You用途可以嘗試在node.js中

TCP套接字
var net = require('net'); 

var HOST = '127.0.0.1'; 
var PORT = 6969; 

// Create a server instance, and chain the listen function to it 
// The function passed to net.createServer() becomes the event handler for the 'connection' event 
// The sock object the callback function receives UNIQUE for each connection 
net.createServer(function(sock) { 

    // We have a connection - a socket object is assigned to the connection automatically 
    console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort); 

    // Add a 'data' event handler to this instance of socket 
    sock.on('data', function(data) { 

     console.log('DATA ' + sock.remoteAddress + ': ' + data); 
     // Write the data back to the socket, the client will receive it as data from the server 
     sock.write('You said "' + data + '"'); 

    }); 

    // Add a 'close' event handler to this instance of socket 
    sock.on('close', function(data) { 
     console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort); 
    }); 

}).listen(PORT, HOST); 

console.log('Server listening on ' + HOST +':'+ PORT); 

退房here

0

然後Socket.io是爲您的方案錯誤的工具。 socket.io需要保持打開套接字才能將事件從服務器返回給客戶端(反之亦然)。事實上,即使服務器不支持WebSocket,socket.io也會回到其他機制,例如輪詢。