nodejs websocket detect disconnected socket

前端 未结 4 2234
余生分开走
余生分开走 2021-01-04 20:30

I have a nodejs websocket server and I have the following problem.

When my clients connect to the server and terminate gracefully the onclose method is

4条回答
  •  Happy的楠姐
    2021-01-04 21:16

    Well I'll try to answer your question with two examples. Try to analyze both of them and learn how they work. They are both tested and working.

    1- Websocket:

    Server:

    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(3000, function() {
        console.log((new Date()) + ' Server is listening on port 3000');
    });
    
    wsServer = new WebSocketServer({
        httpServer: server,
        autoAcceptConnections: false
    });
    
    function originIsAllowed(origin) {
      return true;
    }
    
    wsServer.on('request', function(request) {
        if (!originIsAllowed(request.origin)) {
          request.reject();
          console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
          return;
        }
    
        var connection = request.accept('echo-protocol', request.origin);
        console.log((new Date()) + ' Connection accepted.');
        connection.on('message', function(message) {
            if (message.type === 'utf8') {
                console.log('Received Message: ' + message.utf8Data);
                connection.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.');
        });
    });
    

    Client:

    
    
    
        Web socket Experiment
        
    
    
    
        
    
    
    

    2- Socket.io:

    Server:

    var http = require('http');
        var app = require('express')();
        var httpServer = http.createServer(app)
        var io = require('socket.io')(httpServer);
    
    app.get('/', function(req, res) {
        res.sendfile(__dirname + '/index.html');
    });
    
    io.on('connection', function(socket) {
        socket.emit('news', {
            hello: 'world'
        });
        socket.on('my other event', function(data) {
            console.log(data);
        });
        socket.on('disconnect', function(data) {
            console.log('disconnect!');
        });
    });
    
    httpServer.listen(3000);
    

    Client:

    
    
    
    
    
    
    
    
    

提交回复
热议问题