sql >> Databasteknik >  >> NoSQL >> MongoDB

Nodejs - websocket-node modul:Hur får man multi-client socket-server att fungera?

Du lagrar inte anslutningarna på serversidan. Du ställer bara in dem på servern för att kommunicera direkt fram och tillbaka till servern. Om du vill att meddelanden som går till servern ska skickas tillbaka till alla måste du ställa in .on('message', ...) funktion för varje anslutning på servern att ha det beteendet. För att göra detta måste du lagra anslutningarna när de skapas. Prova detta:

var WebSocketServer = require('websocket').server;
var http = require('http');

var server = http.createServer(function(request, response) {
    console.log((new Date()) + ' Received request for ' + request.url);
    response.writeHead(404);
    response.end();
});
server.listen(5050, function() {
    console.log((new Date()) + ' Server is listening on port 5050');
});

wsServer = new WebSocketServer({
    httpServer: server,
    // You should not use autoAcceptConnections for production 
    // applications, as it defeats all standard cross-origin protection 
    // facilities built into the protocol and the browser.  You should 
    // *always* verify the connection's origin and decide whether or not 
    // to accept it. 
    autoAcceptConnections: false
});

function originIsAllowed(origin) {
  // put logic here to detect whether the specified origin is allowed. 
  return true;
}

//create an array to hold your connections
var connections = [];

wsServer.on('request', function(request) {
    if (!originIsAllowed(request.origin)) {
      // Make sure we only accept requests from an allowed origin 
      request.reject();
      console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
      return;
    }
    var connection = request.accept('echo-protocol', request.origin);

    //store the new connection in your array of connections
    connections.push(connection);
    
    console.log((new Date()) + ' Connection accepted.');
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log('Received Message: ' + message.utf8Data);

            //send the received message to all of the 
            //connections in the connection array
            for(var i = 0; i < connections.length; i++) {
                connections[i].sendUTF(message.utf8Data);
            }
        }
        else if (message.type === 'binary') {
            console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
            connection.sendBytes(message.binaryData);
        }
    });
    connection.on('close', function(reasonCode, description) {
        console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
    });
});



  1. MongoDB via Mongoose JS - Vad är findByID?

  2. Fylla på Ref i mongoose-schemat medan du arbetar med Graphql

  3. mongoose findByIdAndDelete / findOneAndRemove tar inte bort

  4. Hur man hittar dokument och enstaka underdokument som matchar givna kriterier i MongoDB-samlingen