sql >> Database >  >> NoSQL >> MongoDB

Nodejs - websocket-node module:Hoe maak je multi-client socket-server werkend?

Je slaat de verbindingen niet op aan de serverkant. Je stelt ze gewoon op de server in om rechtstreeks heen en weer te communiceren met de server. Als je wilt dat berichten die naar de server gaan, naar iedereen worden teruggestuurd, moet je de .on('message', ...) instellen functie voor elke verbinding op de server om dat gedrag te hebben. Om dit te doen, moet u de verbindingen opslaan zoals ze zijn gemaakt. Probeer dit:

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. Een gepersonaliseerde Facebook-achtige nieuwsfeed bouwen:SQL, MongoDB?

  2. bel een mongo-verzameling met behulp van een variabele

  3. Hoe een verzameling te coderen met regex en complexe criteria met behulp van het Java MongoDB-stuurprogramma?

  4. Atomic als het niet bestaat, voeg het dan in Mongodb .Net-stuurprogramma in