使用PHP和Unity3D对我的项目进行原型设计后,我决定使用Cordova和NodeJS构建生产版本。
我目前正在使用Socket.io和NodeJS,并且对连接感到困惑。我期望这样做的方式是以下过程:
然而,似乎连接似乎保持打开,如果连接关闭,它会不断尝试重新连接,这不是我想要的。我正在尝试建立单一的数据传输状态,类似于向PHP文件发出Web请求时发生的情况。
项目的源代码几乎是样板代码:
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.');
});
});
我不需要持久连接,也不需要连接。
思考:我可以从客户端发送密切握手。例如:
这是处理此问题的正确方法吗?然而问题出现了,如果数据丢失了,那么就会有一个永久打开的套接字。在这种情况下实施基本超时是否理想? (IE:如果在10秒内未收到响应,则表示出现错误或服务器不可用)。
答案 0 :(得分:0)
不确定为什么要使用socket.io。套接字IO用于不同的目的,并不符合您的标准。我已经看到它主要用于实时应用程序和二进制流。您可以在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
答案 1 :(得分:0)
然后Socket.io是您的方案的错误工具。 socket.io需要保持套接字打开以将事件从服务器返回到客户端(反之亦然)。事实上,即使服务器不支持WebSockets,socket.io也会诉诸其他机制,例如轮询。