【发布时间】:2017-04-25 20:07:55
【问题描述】:
我是 Nodejs 和 Socket.io 的新手,这是我第一次创建任何聊天应用程序,如果我问了一些愚蠢的问题,请原谅我。
在我的网络中,我必须提供一种聊天服务,一种是实时辩论,它是一种聊天室,另一种是像 Facebook Messenger 这样的私人消息传递。
我已经在私人信使中创建了两者,然后再显示我正在检查对话 ID 的消息,它的工作非常正常。现场辩论也正常运作。
但是有一个问题,在私人信使中发送的任何消息也会显示在现场辩论窗口中。所以我修改了messenger的Server.js文件,也修改了监听端口,现在live辩论的监听端口是3000,messenger的监听端口是8050,但是Live辩论仍然接收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);
});
【问题讨论】:
标签: node.js redis socket.io chat node-redis