Node.js, данные циклически передаются между сервером и клиентом - PullRequest
1 голос
/ 25 июля 2011

Я написал небольшой сервер node.js, используя модуль "net".код клиента и сервера выглядит следующим образом: клиент .. сокет объявлен как глобальный и вызывается этой функцией.Я использую сторонний API для сокетов, который прекрасно работает с сокетом php или C ++. Так что это определенно не ошибка на основе API.

                   function SocketAPI()
            {
                socket.onConnect = function(success)
                {
                    if(success)
                    {
                        Connected = true;
                    }else{
                        alert("Failed to connect to server!");
                    }
                }   
                socket.onClose = function()
                {
                    alert("Connection lost to server!");
                }
                socket.onData = function(text)
                {
                    if(text==">Send_AuthenTication")
                    { // Tells the client to send authentication data
                        if(localStorage.ID)
                        {
                            socket.send(">"+localStorage.ID); //encrypted
                        }else{
                            socket.send("<");
                        }

                    }else if(text.substr(0,2)==">>"){
                        // User inforamation accept and apply it
                        Packet = JSON.parse(text.substr(2,text.length-2));
                        while(Users.length){ // users is an array which contains    other peers connected to the server 
                        Users.pop();
                        }
                        me = Packet;
                            me.Prepare();
                        Users.push(me.NameBOX);
                        Usrlst.ShowTab(0);
                        // Now make the socket only listen for output buffer.
                        socket.onData = function( Data ){
                            //alert(Data);
                            setTimeout( Jparse,100, Data );
                        } 
                    }

                }
                socket.connect('localhost',1337);// makes connection
            }

где Jparse - это функция, которая анализирует json, отправленный сервером в соответствии сданные отправляются с использованием socket.send (входные данные);

И сервер выглядит следующим образом: *

..

    var server = net.createServer(function(socket){
socket.setEncoding('utf8');
socket.Peer = new Client();

socket.on('data',function(Data){
    if(Data[0]==">") // this tells that the request is authentication event
    {
     // Loads from Pool
    }else if(Data[0]=="<"){
        NewUSER(this.Peer); // Makes new user
    }
    this.write(">>"+JSON.stringify(this.Peer)+"\0","utf8",function(){});
    this.on('data',function(Data){
        console.log(Data);
        this.write(Data,'utf8',function(){});
    });
});
socket.on('end',function(){
    console.log("Connection End");
});
// Socket Closed by client/errors
socket.on('close',function(error){
    console.log("Connection is closed by Had errors?:"+error);
});
// Handshake started
socket.on("connect",function()
{ // add server connection in here aha we now have a new user.
    sys.puts("Connection from"+ socket.remoteAddress);
    this.write(">Send_AuthenTication\0",'utf8',function(){});
});

   });
 // starting the server.
 server.listen(1337,"localhost");

Когда я отправляю данные с помощью клиентского HTMLПейдж отправляет данные на сервер и возвращается, как положено, но процесс становится повторяющимся, и я получаю одно и то же более одного раза с обеих сторон, я имею в виду сервер и клиента.

скажем.если я посылаю «привет» от клиента, он получает 2-3 «привет» обратно на стороне клиента от сервера ... одна вещь, которую я только что заметил, это увеличение количества рекурсий каждый раз, когда я отправляю данные на сервер.

Кто-нибудь понял, что случилось?

1 Ответ

2 голосов
/ 25 июля 2011

Каждый раз, когда вы выполняете внешний on('data' ..., вы добавляете еще один on('data' ... элемент; Вот почему вы получаете увеличенное число при каждом запросе. Вы модифицируете структуру своего обработчика, чтобы добавить обработчики в свой обработчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...