2016-07-11 12 views
0

Ich versuche, Chat-Anwendung mit SockJS für meine Wordpress-Website zu machen. Mein Problem ist, dass der Client die Verbindung trennt, nachdem er sich mit dem Server verbunden hat. Ich habe keine Ahnung. Hier ist mein Server und Client-Code.SockJS trennt nach dem Verbinden

Server:

var http = require('https'); 
var sockjs = require('sockjs'); 
var fs = require("fs"); 
var commands = { 
    key: fs.readFileSync('privkey.pem'), 
    cert: fs.readFileSync('cert.pem') 
}; 
var clients = []; 
var users = []; 
var messages = []; 


function broadcast(message){ 
    for (var client in clients){ 
    clients[client].write(JSON.stringify(message)); 
    } 
} 
var echo = sockjs.createServer(); 
echo.on('connection', function(conn) { 
clients[conn.id] = conn; 
conn.on('data', function(e) { 
    var data = JSON.parse(e); 
    switch(data.action){ 
     case "new_user": 
      clients[conn.id]["username"]=data.username; 
      users[data.username]["avatar"]=data.avatar; 
      users[data.username]["url"]=data.url; 
     case "new_message": 
      data.avatar=users[data.username]["avatar"]; 
      data.url=users[data.username]["url"]; 
      messages.unshift(data); 
      if(messages.length>100){ 
       messages.length=100;  
      } 
      broadcast(data); 
    } 

}); 
conn.on('close', function() { 
    delete clients[conn.id]; 
    delete users[clients[conn.id]["username"]]; 
}); 

}); 
var server = http.createServer(commands); 
echo.installHandlers(server, {prefix:'/echo'}); 
server.listen(9999, '0.0.0.0'); 

meine Kundennummer:

var recInterval = null; 
var socket = null; 
console.log("loaded js"); 
function new_user(){ 
    // Get the content from the textbox 

    // The object to send 
    var send = { 
    action: "new_user", 
    username: user.username, 
    avatar: user.avatar, 
    url: user.url 
    }; 

    // Send it now 
    socket.send(JSON.stringify(send)); 
} 
function send_message(message){ 
    // Get the content from the textbox 

    // The object to send 
    var send = { 
    action: "new_message", 
    username: user.username, 
    message: message 
    }; 

    // Send it now 
    socket.send(JSON.stringify(send)); 
} 
function new_conn(){ 
    socket = new SockJS('https://example.com:9999/echo'); 
    clearInterval(recInterval); 
    socket.onopen = function() { 
     console.log('connected to chat server'); 
     connected=true; 
     new_user(); 
    };  
    socket.onclose = function() { 
     console.log('disconnected from chat server'); 
     socket = null; 
     recInterval = setInterval(function() { 
      new_conn(); 
     }, 2000); 
    };   
    socket.onmessage = function(e) {   
     var msg = JSON.parse(e.data);   
     alert(msg);     
    }; 

}; 
new_conn(); 

Und Konsolenausgabe ist wie folgt:

chat.js ver = 4.5.3: 66 verbunden Chat-Server

chat.js? Ver = 4.5.3: 71 vom Chat-Server getrennt

chat.js ver = 4.5.3: 66 angeschlossenen Server

chat.js chatten ver = 4.5.3: 71 getrennt von Chat-Server

Was ist Problem? Dank

Antwort

0

Problem ein einfacher Objekt Syntaxfehler auf Server-Datei war.

1

Wenn Sie für immer/PM2/smth sonst dann denke ich Problem auf serverseitige

users[data.username]["url"]=data.url; 
    break; // missed! 
    case "new_message": 
+0

Ich benutze pm2. Ich habe fehlende Pausen hinzugefügt, nichts hat sich geändert. Gibt es eine Möglichkeit, Server-Skript zu debuggen? –

+0

Versuchen Sie, die zweite Pause für den Fall hinzuzufügen. Außerdem: pm2 ausschalten und die Ausgabe der Serverkonsole anzeigen. Ich glaube, Sie haben ein Problem mit einigen fehlenden Feldern auf dem Objekt (Daten, Clients oder Clients). Imho PM2 ist nicht gut für die Entwicklung. –