Ios 创建聊天室“;房间“;使用Node、Express、Heroku和Socket.io
因此,我已经开发了一段时间的应用程序,在可伸缩性方面遇到了问题。我对诺德和赫罗库都是新手。请容忍我 我最初是为了让我的节点服务启动并运行。本质上,它创建了一个实时聊天服务。然而,我现在的问题是如何创建“房间”。对我来说,可能有15+次聊天是没有意义的,但它们都在同一个clientSocket上调用相同的函数,我必须确定哪些UI更新会发送到前端的哪些客户端。到目前为止,我有15个以上的客户端都试图在不同的聊天中进行交互,但我会立即向每个人推送更新(例如,当发布消息时),然后根据我在每个设备上缓存的房间ID确定要更新的用户界面。对我来说,这似乎是对计算能力的严重浪费 我认为解决方案涉及修改每个客户机的连接方式(下面是代码片段)。是否有方法创建基于位置的“房间”,例如,连接的客户端是唯一获得这些更新的客户端?你知道怎么解决这个问题吗?如果有人愿意解释我对Node、Express、Heroku、Socket.io或其他内容不了解的地方,请务必让我知道Ios 创建聊天室“;房间“;使用Node、Express、Heroku和Socket.io,ios,node.js,express,heroku,socket.io,Ios,Node.js,Express,Heroku,Socket.io,因此,我已经开发了一段时间的应用程序,在可伸缩性方面遇到了问题。我对诺德和赫罗库都是新手。请容忍我 我最初是为了让我的节点服务启动并运行。本质上,它创建了一个实时聊天服务。然而,我现在的问题是如何创建“房间”。对我来说,可能有15+次聊天是没有意义的,但它们都在同一个clientSocket上调用相同的函数,我必须确定哪些UI更新会发送到前端的哪些客户端。到目前为止,我有15个以上的客户端都试图在不同的聊天中进行交互,但我会立即向每个人推送更新(例如,当发布消息时),然后根据我在每个设备上缓存的
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var pg = require('pg');
var userList = [];
var typingUsers = {};
var ActiveQueue = [];
app.get('/', function(req, res){
res.send('<h1>Active RT Queue</h1>');
});
var conString = "postgres://url";
pg.defaults.ssl = true;
var client = new pg.Client(conString);
client.connect(function(err) {
if(err) {
return console.error('could not connect to postgres', err);
}
});
http.listen(process.env.PORT || 5000, function(){
console.log('Listening on *:5000');
});
io.on('connection', function(clientSocket){
console.log('a user connected');
clientSocket.on('disconnect', function(){
console.log('user disconnected');
var clientNickname;
for (var i=0; i<userList.length; i++) {
if (userList[i]["id"] == clientSocket.id) {
userList[i]["isConnected"] = false;
clientNickname = userList[i]["nickname"];
break;
}
}
delete typingUsers[clientNickname];
io.emit("userList", userList);
//io.emit("userExitUpdate", clientNickname);
//io.emit("userTypingUpdate", typingUsers);
});
clientSocket.on("exitUser", function(clientNickname){
for (var i=0; i<userList.length; i++) {
if (userList[i]["id"] == clientSocket.id) {
userList.splice(i, 1);
break;
}
}
io.emit("userExitUpdate", clientNickname);
});
clientSocket.on("connectUser", function(clientNickname) {
var message = "User " + clientNickname + " was connected.";
console.log(message);
var userInfo = {};
var foundUser = false;
for (var i=0; i<userList.length; i++) {
if (userList[i]["nickname"] == clientNickname) {
userList[i]["isConnected"] = true
userList[i]["id"] = clientSocket.id;
userInfo = userList[i];
foundUser = true;
break;
}
}
if (!foundUser) {
userInfo["id"] = clientSocket.id;
userInfo["nickname"] = clientNickname;
userInfo["isConnected"] = true
userList.push(userInfo);
}
io.emit("userList", userList);
io.emit("userConnectUpdate", userInfo)
});
///functions pertaining to transfer of messages and updating the UI follow
var-app=require('express')();
var http=require('http')。服务器(应用程序);
var io=require('socket.io')(http);
var pg=需要(“pg”);
var userList=[];
var typingguers={};
var ActiveQueue=[];
app.get('/',函数(req,res){
res.send(“活动RT队列”);
});
var conString=”postgres://url";
pg.defaults.ssl=true;
var客户=新的pg客户(施工);
client.connect(函数(err){
如果(错误){
返回控制台。错误('无法连接到postgres',错误);
}
});
http.listen(process.env.PORT | | 5000,函数(){
console.log('监听*:5000');
});
io.on('connection',函数(clientSocket){
log(“已连接的用户”);
clientSocket.on('disconnect',function()){
console.log('user disconnected');
var客户昵称;
对于(var i=0;i我会尝试以下方法:
io.on('connection', function(clientSocket) {
clientSocket.on('room:general', function(data) {
var user = data.user;
var message = data.message;
console.log('%s sent new message: %s',user,message);
io.emit('room:general:newMessage', data);
});
//and so for each room
.........
});
从前端,您需要发送JSONObject:
{
user:your_username,
message:user_message
}
,
我从未制作过聊天应用程序,希望能有所帮助。听起来它们可能正是您想要的。@JoeClay谢谢。假设我为每个房间创建了一个不同的名称空间。我是否必须复制我已经编写的函数,以便它们符合这些不同的名称空间?或者创建一组这样的房间更有意义每个人都能处理大量的流量吗?我想我不明白连接是如何处理的
socket.emit("room:general", json_object);
socket.on("room:general:newMessage", onYourDefinedEmiterListener);
..........
..........
//and so for each room