关键词:
【中文标题】Socket.io 随机聊天室【英文标题】:Socket.io random chatroom 【发布时间】:2017-09-21 20:06:43 【问题描述】:我正在尝试创建一个应用程序(类似omegle),人们可以在其中登录并与随机的人交谈。 案例:当两个人(客户)登录然后console.log(房间);在客户端(聊天开始事件)中打印房间。但是当第三个客户端登录而不是等待时,他创建了一个新房间并与另外两个创建新房间中的一个连接。根据我的情况,这不应该发生函数 findPeerForLoneSocket(socket);
服务器端:
// Socket.io Setup
var io = socket(server);
var allUsers = ;
var rooms = ;
var queue = [];
var names =[];
app.get('/chat2',function(req,res)
if (req.isAuthenticated())
res.render('chat');
var findPeerForLoneSocket = function(socket)
if (queue.length > 0)
var peer= queue.pop();
var room = socket.id + '#' + peer.id;
peer.join(room);
socket.join(room);
rooms[peer.id] = room;
rooms[socket.id] = room;
peer.emit('chat start', 'name': names[socket.id], 'room':room);
socket.emit('chat start', 'name': names[peer.id], 'room':room);
else
queue.push(socket);
io.on('connection', function(socket)
findPeerForLoneSocket(socket);
);
else
res.redirect('/');
)
客户端:
$(document).ready(function()
var socket = io('http://localhost:3000');
var connected = false;
var message = document.getElementById('message'),
handle = document.getElementById('handle'),
btn = document.getElementById('send'),
btn2 = document.getElementById('next'),
output = document.getElementById('output');
socket.on('connect', function (data)
connected = true;
);
socket.on('chat start', function(data)
$( "#connecting" ).remove();
$( "#connected" ).text('Connected...');
room = data.room;
console.log(room);
);
);
【问题讨论】:
【参考方案1】:当客户端连接到/chat2
时,会发生两件事:
1.我们渲染一个chat
文件,
2. 我们在'connecting'
事件上创建一个新的监听器。
因此,每次新客户端连接时,都会创建新的侦听器。当两个客户端已经连接并成功移动到一个房间时,我们已经有两个听众 io.on('connection')
等待。当第三个客户端连接时,第一个侦听器将他推送到队列数组,然后第二个侦听器弹出他并为他和他们的同伴创建一个新房间。 socket.id
和 peer.id
都是一样的,所以第三个客户自己聊天。
当第四个客户端连接时,已经有三个监听器了......
您必须从app.get
代码中取出io.on('connecting')
,如下例所示(为调试添加了几个console.logs)。
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
var queue = [];
var findPeerForLoneSocket = function(socket)
if (queue.length > 0)
var peer= queue.pop();
console.log(peer.id + ' was popped from queue\n');
log(queue);
var room = socket.id + '#' + peer.id;
peer.join(room);
socket.join(room);
console.log(socket.id + ' and ' + peer.id + ' joined room ' + room);
peer.emit('chat start', 'name': socket.id, 'room':room);
socket.emit('chat start', 'name': peer.id, 'room':room);
else
queue.push(socket);
console.log(socket.id + ' was pushed to queue\n');
log(queue);
;
var log = arr =>
console.log('Queue: ');
for (let i = arr.length; i--;)
console.log(arr[i].id);
console.log('\n');
;
io.on('connection', function (socket)
console.log(socket.id + ' connected');
findPeerForLoneSocket(socket);
);
http.listen(3000, function()
console.log('express + socket.io server listening on *:3000');
);
app.get('/', (req,res) =>
res.sendFile(__dirname + '/sterg.html');
);
【讨论】:
socket.io在线聊天室
socket.io在线聊天室由David发表在天码营 socket.io是一个JavaScript库,用来建立实时的WebApp。socket.io可以通过npm安装到Node.js的应用中,同时浏览器和服务器拥有同样的API接口。你还在思考socket.io是如何做到实时推送的么?... 查看详情
使用 socket.io 管理多个聊天室的正确方法是啥?
】使用socket.io管理多个聊天室的正确方法是啥?【英文标题】:Whatistheproperwaytomanagemultiplechatroomswithsocket.io?使用socket.io管理多个聊天室的正确方法是什么?【发布时间】:2011-10-0623:26:39【问题描述】:使用socket.io管理多个聊天室... 查看详情
Socket.IO 订阅多个频道
...115:34:33【问题描述】:我想在Socket.IO之上构建一个简单的聊天室系统,用户可以在其中创建一个新的聊天室,然后人们就可以开始聊天了。这听起来很简单,但是作为我现在正在运行的Socket.IO0.9.4,在阅读了一些SO帖子以及关于so... 查看详情
node.js笔记-使用socket.io构建websocket聊天室(代码片段)
先安装socket.ionpminstallsocket.io服务端代码:letapp=require('http').createServer();letio=require('socket.io')(app,cors:true);letport=3000;letclientCount=0;app.listen(port);io.on('connection',function(socket)clientCount++;socket.nickname&... 查看详情
讨论:使用 node.js / socket.io 实现聊天室的最佳方式?
】讨论:使用node.js/socket.io实现聊天室的最佳方式?【英文标题】:Discussion:Bestwaytoimplementachatroomwithnode.js/socket.io?【发布时间】:2011-11-2018:49:48【问题描述】:我说的不是一般的聊天应用程序,而是专门讨论聊天室的实现。所以... 查看详情
Phonegap Socket.io 聊天
】PhonegapSocket.io聊天【英文标题】:PhonegapSocket.ioChat【发布时间】:2015-07-2019:13:36【问题描述】:我正在尝试使用socket.io构建一个phonegap聊天应用程序,现在我了解它如何使用express框架(http://socket.io/get-started/chat/)工作,但是有人... 查看详情
Node 和 Socket.IO - 私人聊天(一对一)
】Node和Socket.IO-私人聊天(一对一)【英文标题】:NodeandSocket.IO-Privatechat(onetoone)【发布时间】:2018-12-3010:18:56【问题描述】:我正在创建与Socket.IO和Express的聊天,以便能够一对一聊天(私人聊天)。主要问题是:我想向socket.id... 查看详情
vue+socket.io实现一个简易聊天室
...p; vue+vuex+elementUi+socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度。因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那么容易了。功能虽然不多,但还是有收获。设... 查看详情
递归删除多个 socket.io 监听器
...ode.js和socket.io编写一个应用程序,用户可以在其中在个人聊天室中相互交谈。每个人都可以有多个打开的聊天室。当用户想要退出聊天室时,系统必须移除该聊天室的所有套接字监听器。websocket.on(\'create 查看详情
反应的socket.io聊天问题
】反应的socket.io聊天问题【英文标题】:socket.iochatproblemswithreact【发布时间】:2020-06-1015:43:17【问题描述】:我正在开发一个create-react-app项目,并试图整合一个由sockets.io提供支持的聊天控制台。问题是,当前端正确捕获聊天消... 查看详情
在socket.io中获取聊天室中有多少人[重复]
】在socket.io中获取聊天室中有多少人[重复]【英文标题】:gettinghowmanypeopleareinachatroominsocket.io[duplicate]【发布时间】:2012-03-1006:53:28【问题描述】:我现在有这个设置昵称和房间的代码:io.sockets.on(\'connection\',function(client)varRoom="";... 查看详情
在socket.io中获取聊天室中有多少人[重复]
】在socket.io中获取聊天室中有多少人[重复]【英文标题】:gettinghowmanypeopleareinachatroominsocket.io[duplicate]【发布时间】:2012-03-1006:53:28【问题描述】:我现在有这个设置昵称和房间的代码:io.sockets.on(\'connection\',function(client)varRoom="";... 查看详情
socket.io 与私人房间聊天
】socket.io与私人房间聊天【英文标题】:socket.iochatwithprivaterooms【发布时间】:2011-11-1816:16:15【问题描述】:我开始研究node和socket.io。我已经创建了一个简单的聊天应用程序,我对它的简单程度感到惊讶。现在,我想更进一步,... 查看详情
Socket.io 事件多次发出
】Socket.io事件多次发出【英文标题】:Socket.ioeventemittingmultipletimes【发布时间】:2019-10-3015:52:05【问题描述】:我正在创建一个带有实时通知的聊天应用程序,通知会被发送,但它们会随机发送多次,而应该只发送一次。我在前... 查看详情
使用 Socket.IO 和 NodeJS 实现音频聊天
】使用Socket.IO和NodeJS实现音频聊天【英文标题】:ImplementingAudiochatwithSocket.IOandNodeJS【发布时间】:2015-05-2207:09:57【问题描述】:我使用sails.js(node.js)和socket.IO创建了一个聊天应用程序。我需要同时实现audiochat和filetransfers。谁能... 查看详情
聊天应用程序 - Socket.IO/Angular/MongoDB - 聊天和聊天历史不显示
】聊天应用程序-Socket.IO/Angular/MongoDB-聊天和聊天历史不显示【英文标题】:Chatapp-Socket.IO/Angular/MongoDB-Chatandchathistorynotdisplayed【发布时间】:2016-12-2021:44:00【问题描述】:我创建了一个简单的聊天应用程序,聊天和聊天记录不显... 查看详情
socket.io 在一页上进行多个聊天
】socket.io在一页上进行多个聊天【英文标题】:socket.iomultiplechatsononepage【发布时间】:2014-10-1405:02:41【问题描述】:我想在一个页面上实现多个聊天窗口(例如facebook)。目前使用“房间”,简化代码:[客户]socket.emit(\'join\',\'ro... 查看详情
socket.io 聊天示例 -sails.js
】socket.io聊天示例-sails.js【英文标题】:Exampleofsocket.iochat-sails.js【发布时间】:2015-03-1408:01:48【问题描述】:所以我尝试将socket.io集成到我的sails项目中。但是我在sails.js网站上发现的文档很少。我正在尝试在我的服务器的两个... 查看详情