2016-06-19 16 views
0

Beim Versuch, einen einfachen NodeJS-Server und einen Socket.io-Client einzurichten, um etwas mit WebSockets zu testen, bin ich auf etwas Dummes gestoßen. Ich bin mir ziemlich sicher, dass es etwas Dummes ist Ich habe getan, weil ich mit NodeJS/Socket.io vorher gearbeitet habe und dieses Problem nie hatte.NodeJS/Socket.io empfängt kein Ereignis vom Client

Mit dem Code unten, ich bin in der Lage, das "Tick" -Ereignis vom Server auf dem Client zu empfangen, aber der Server scheint nicht in der Lage, das "Ping" -Ereignis vom Client zu erhalten. 'tick' wurde verwendet, um sicherzustellen, dass server-> client funktioniert, und 'ping', um client-> server zu testen.

Mit neuester Socket.io (1.4.6) und Express (4.14.0)

server.js:

var express = require('express'); 
var app = require('express')(); 
var server = require('http').createServer(app); 
var sio = require('socket.io')(server); 
var path = require('path'); 

app.use(express.static(path.join(__dirname, 'public_html'))); 

// Socket.io 
sio.on('connection', (socket) => { 
    // Store socket ID 
    var socketID = socket.conn.id; 

    // Log connection 
    console.log('Connection:', socketID); 

    // Ping event 
    socket.on('ping', (message) => { 
     console.log('Ping:', socketID, '-', (message || '(no message>')); 
    }); 

    // Tick event 
    var tick = function(){ 
     var now = new Date().getTime().toString(); 
     socket.emit('tick', now); 
    } 
    setInterval(tick, 5000); 

    // Disconnect event 
    socket.on('disconnect',() => { 
     console.log('Disconnected:', socketID); 
    }); 
}); 

server.listen(4100,() => { 
    console.log('Listening on :4100'); 
}); 

index.html:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Websockets Benchmark</title> 
</head> 
<body> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
     // Socket.io 
     var sio = io(); 

     // Connection event 
     sio.on('connect',() => { 
      console.log('Connected'); 

      sio.emit('ping', 'on connect'); 
     }); 

     // Tick event 
     sio.on('tick', (time) => { 
      console.log('Tick', time); 
     }); 

     // Error event 
     sio.on('error', (e) => { 
      console.error(e); 
     }); 
    </script> 
</body> 

Antwort

0

Kann nicht feststellen, ob das Ereignis ping von Socket.io, o. Genommen wurde r die folgende Zeile verursachte ein Problem aufgetreten:

console.log('Ping:', socketID, '-', (message || '(no message)')); 

So oder so, durch die Ereignisnamen zu ev:ping zu wechseln (die ohnehin leichter zu verstehen ist), und vereinfachen diese Zeile es geregelt! :)

0

hoffe, dass ich Ihre Frage verstanden habe ... Ich habe etwas Arbeit mit Chat mit socket.io so ma Es wird dir helfen. hier ist sie:

<div class="searchBox" style="height: 600px ; width: 500px"> 
     <div style=";width:400px;border-right:1px solid black;;overflow:scroll-y;"> 
     <b style="color: black ;text-decoration: underline">USERS:</b> 
     <div id="users" style="color: black"></div> 
     </div> 
     <div style=";width:300px;height:250px;overflow:scroll-y;padding:10px;"> 
     <b style="color: black ; text-decoration: underline">CONVERSATION:</b> 
     <div id="conversation" style="color: black"></div> 
     <input id="data" style="width:200px;" /> 
     <button id="datasend" style="color: #0f0f0f;">send</button> 
     </div> 

und die js:

var socket = io.connect('http://localhost:8080'); 
    // on connection to server, ask for user's name with an anonymous callback 
    socket.on('connect', function(){ 
     // call the server-side function 'adduser' and send one parameter (value of prompt) 
     socket.emit('adduser', prompt("What's your name?")); 
    }); 
    // listener, whenever the server emits 'updatechat', this updates the chat body 
    socket.on('updatechat', function (username, data) { 
     $('#conversation').append('<b>'+username + ':</b> ' + data + '<br>'); 
    }); 
    // listener, whenever the server emits 'updateusers', this updates the username list 
    socket.on('updateusers', function(data) { 
     $('#users').empty(); 
     $.each(data, function(key, value) { 
      $('#users').append('<div>' + key + '</div>'); 
     }); 
    }); 
    // on load of page 
    $(function(){ 
     // when the client clicks SEND 
     $('#datasend').click(function() { 
      var message = $('#data').val(); 
      $('#data').val(''); 
      // tell server to execute 'sendchat' and send along one parameter 
      socket.emit('sendchat', message); 
     }); 
     // when the client hits ENTER on their keyboard 
     $('#data').keypress(function(e) { 
      if(e.which == 13) { 
       $(this).blur(); 
       $('#datasend').focus().click(); 
      } 
     }); 
    }); 

Server:

var app = require('./app'); 
var http = require('http'); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 

server.listen(8080, function() { 
    console.log("Gym Project is listening to: http://127.0.0.1:8080"); 
}); 

// routing 
app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 


// usernames which are currently connected to the chat 
var usernames = {}; 

io.sockets.on('connection', function (socket) { 

    // when the client emits 'sendchat', this listens and executes 
    socket.on('sendchat', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     io.sockets.emit('updatechat', socket.username, data); 
    }); 

    // when the client emits 'adduser', this listens and executes 
    socket.on('adduser', function(username){ 
     // we store the username in the socket session for this client 
     socket.username = username; 
     // add the client's username to the global list 
     usernames[username] = username; 
     // echo to client they've connected 
     socket.emit('updatechat', 'SERVER', 'you have connected'); 
     // echo globally (all clients) that a person has connected 
     socket.broadcast.emit('updatechat', 'SERVER', username + ' has connected'); 
     // update the list of users in chat, client-side 
     io.sockets.emit('updateusers', usernames); 
    }); 

    // when the user disconnects.. perform this 
    socket.on('disconnect', function(){ 
     // remove the username from global usernames list 
     delete usernames[socket.username]; 
     // update list of users in chat, client-side 
     io.sockets.emit('updateusers', usernames); 
     // echo globally that this client has left 
     socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); 
    }); 
}); 

dies ist eine sehr einfache Chat mit einigen Kunden ... kann es hilft :)

+0

Danke - Ihr Code führte mich nicht direkt zu der Antwort, aber ich denke, die Namen meiner Veranstaltungen kollidiert mit denen von Socket.io – ToshNeox

Verwandte Themen