如何在nodejs中分隔管道套接字服务器的输入/输出?

时间:2017-02-13 03:18:51

标签: javascript node.js sockets

我在nodejs中有关于套接字服务器/客户端的源代码。

const net = require('net');

net.createServer((socket)=>{
  socket.pipe(socket);
  socket.on('data', (data)=>{
    console.log('receive data ', data.toString());
    socket.write('this is server')

  });
}).listen(3000);

console.log("Chat server running at port 5000\n");

let client = new net.Socket();
client.setEncoding('utf8');
client.connect(3000, '127.0.0.1', function() {
    console.log('Connected');
    client.write('Hello, server! Love, Client.');
});

client.on('data', function(data) {
    console.log('Received: ' + data);
});

当我运行上面的代码时,服务器会将数据(来自客户端)发送回客户端。我知道这是由socket.pipe(socket);提供的。我想保留该代码,并且正在寻找一种在客户端分离输入/输出数据的方法,如下所示:

client.on('data', function(data) {
    if( the data is sent from client ){
        ...
    } else {
        //this is the data generated from server
    }
});

有没有人知道在nodejs客户端如何做到这一点?

1 个答案:

答案 0 :(得分:0)

实际上,您可以从客户端和服务器中分离出数据,具体取决于您发出的消息或您收听的内容,从中可以区分客户端和服务器。

您从服务器发出的消息是您在客户端收到的消息,如果客户端正在侦听该消息,则客户端发出的消息是服务器在服务器正在侦听消息时收到的消息。

以下是socket.io

的代码
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);


app.get('/', function(req, res){
        res.send('<h1>SocketChat Server</h1>');
        });


http.listen(3000, function(){
            console.log('Listening on *:3000');
            });


io.on('connection', function(clientSocket){
   /* Here server is listening to client 'connectUser' message so here   data is sent from client*/
  clientSocket.on('connectUser', function(clientNickname, groupName) {
                      var message = "User " + clientNickname + " was connected." + clientSocket;

                          console.log(message);
 clientSocket.emit('userConnected');
});
});

/ *此处服务器正在发送客户端将接收的消息(&#39; userConnected&#39;)。 * /

从上面你可以看到如何区分客户端和服务器消息。