Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用NodeJS和Socket.IO设置无状态连接_Node.js_Sockets - Fatal编程技术网

Node.js 使用NodeJS和Socket.IO设置无状态连接

Node.js 使用NodeJS和Socket.IO设置无状态连接,node.js,sockets,Node.js,Sockets,在使用PHP和Unity3D创建项目原型之后,我决定使用Cordova和NodeJS构建生产版本 我目前正在NodeJS中使用Socket.io,对连接有一些混淆。我本以为这是通过以下程序实现的: 客户端将通过请求连接到服务器 服务器将响应该请求 连接将被关闭 然而,似乎连接喜欢保持打开状态,如果连接关闭,它会不断尝试重新连接,这不是我要寻找的。我试图建立一个单一的数据传输状态,类似于向PHP文件发出web请求时发生的情况 该项目的源代码基本上是样板代码: var application = r

在使用PHP和Unity3D创建项目原型之后,我决定使用Cordova和NodeJS构建生产版本

我目前正在NodeJS中使用Socket.io,对连接有一些混淆。我本以为这是通过以下程序实现的:

  • 客户端将通过请求连接到服务器
  • 服务器将响应该请求
  • 连接将被关闭
  • 然而,似乎连接喜欢保持打开状态,如果连接关闭,它会不断尝试重新连接,这不是我要寻找的。我试图建立一个单一的数据传输状态,类似于向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.');
        });
    });
    
    我不需要持久连接,也不需要

    想法:我可以与客户进行亲密的握手。例如:

  • 向服务器发送一些数据
  • 从服务器接收一些数据
  • 向服务器发送关闭请求/只需关闭套接字
  • 一旦套接字关闭,继续应用程序逻辑

  • 这是正确的处理方法吗?然而,问题出现了,如果数据丢失,那么就会有一个永久打开的套接字。在这种情况下,实现基本超时是否理想?(即:如果在10秒内未收到响应,则表示出现错误或服务器不可用)

    不确定为什么要使用socket.io进行此操作。套接字IO用于不同的目的,在这里不符合您的标准。我主要了解了它在实时应用程序和二进制流中的使用

    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);
    

    检查一下

    那么Socket.io对于您的场景来说是错误的工具。io需要保持套接字打开,以便将事件从服务器返回到客户端(反之亦然)。事实上,即使大多数服务器不支持WebSocket,socket.io也会求助于其他机制,例如轮询