2017-04-25 92 views
0

我是Nodejs和Socket.io的新手,这是我第一次创建任何聊天应用程序,所以如果我问一些愚蠢的问题,请原谅我。如何创建多个Nodejs套接字io服务器客户端?

在我的网络中,我必须提供一种聊天服务,一种是即时聊天,它是一种聊天室,另一种是像Facebook Messenger这样的私人消息。

我已经在显示消息之前在私人信使中创建了两个对话,我正在检查对话ID,它的工作方式非常合适。现场辩论也适用。

但是有一个问题,任何在私人信使发送的消息也显示在现场辩论窗口中。因此,我更改了Messenger的Server.js文件,并且更改了侦听端口,现在用于实时辩论的侦听端口是3000,而Messenger是8050,但仍然收到Messenger消息的实时辩论。

我在做错误的方式?有没有其他方式可以运行两个聊天应用程序?

我使用这台服务器代码

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var redis = require('redis'); 

server.listen(3000); 
io.on('connection', function (socket) { 

    console.log("client connected"); 
    var redisClient = redis.createClient(); 
    redisClient.subscribe('message'); 

    redisClient.on("message", function(channel, data) { 
    console.log("mew message add in queue "+ data+ " channel"); 
    socket.emit(channel, data); 
    }); 

    socket.on('disconnect', function() { 
    redisClient.quit(); 
    }); 

}); 

对于使用命名空间 server.js

var nsp = io.of('/debate') 
nsp.on('connection', function (socket) { 

    console.log("client connected"+socket.id); 
    var redisClient = redis.createClient(); 
    redisClient.subscribe('message'); 
    var redisClient1 = redis.createClient(); 
    redisClient1.subscribe('debate'); 

    redisClient.on("message", function(channel, data) { 
    console.log("mew message add in queue "+ data+ " channel"); 
    nsp.emit(channel, data); 

    }); 

    socket.on('disconnect', function() { 
    redisClient.quit(); 
    }); 

}); 

客户端代码

var socket = io.connect('http://localhost:3000/debate'); 
socket.on('message', function (data) { 
    data = jQuery.parseJSON(data); 
    console.log(data.user); 
    $("#messages").append("<strong>"+data.user+":</strong><p>"+data.message+"</p>"); 
    $('#messages').animate({ 
    scrollTop: $('#messages').get(0).scrollHeight}, 200); 
}); 

回答

1

socket.io支持使用不同的命名空间的。您应该使用该功能而不是创建两个单独的服务器。之后,您可以使用socket.emit来访问特定的命名空间。欲了解更多信息,请参阅文档:https://socket.io/docs/rooms-and-namespaces/

+0

这是我想要的,但与使用namesapce,我的客户端不连接。我还使用了socket0(socket.id).emit(channel,data); 这一个连接到客户端,但不发射数据。 我用名字空间代码编辑了这个问题。请看一看。 – vinita

0

这不是太困难,我写了一个聊天应用程序,因为我认为每个人在启动nodejs时都会这样做,但nodeJS的房间很容易使用。

io.on('connection', function(client){ 

    client.on('room_connection', function(id){ 
     client.join(id); // User joins room. 
    }) 

    client.on('message', function(data){ 
     io.to(data.room).emit('message', {message:data.message, client:client.conn.id}); 
    }); 
}) 

这几乎是你所需要的。这适用于PM,因为你不会允许多个用户加入这个聊天室,以及多个用户可以加入的普通聊天室。

相关问题