2017-04-25 103 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,因爲你不會允許多個用戶加入這個聊天室,以及多個用戶可以加入的普通聊天室。

相關問題