带有 Socket.io 和 Node 的动态房间 [英] Dynamic rooms with Socket.io and Node
本文介绍了带有 Socket.io 和 Node 的动态房间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 Socket.io v.7 中的新聊天室"功能来创建动态聊天室,但在我的示例中让静态聊天室无法正常工作时遇到了问题.根据用户选择的 URL,他们应该在 room1 或 room2 中结束.用户在聊天中输入的任何内容都应广播给同一房间的用户.我有 2 个浏览器(chrome 和 ff),每个浏览器都有一个打开到/room1 和/room2 的选项卡,但是我输入的任何内容似乎都没有广播到其他选项卡.我做错了什么?
服务器代码
var app = require('express').createServer();var io = require("socket.io").listen(app);io.sockets.on('connection', function (socket) {//加入房间并保存房间名称socket.on('加入房间',功能(房间){socket.set('room', room, function() { console.log('room' + room + 'saved'); } );socket.join(房间);})socket.on('message', function(data) {console.log("客户端数据:" + data);//查找房间并广播到那个房间socket.get('room', function(err, room) {//房间示例 - https://github.com/learnboost/socket.io//两种方法都不适合我socket.broadcast.to(room).emit('新粉丝');io.sockets.in(room).emit('new non-fan');})})});app.get('/room1', function(req, res){res.render('example2-client.ejs', {layout:false});});app.get('/room2', function(req, res){res.render('example2-client-2.ejs', {layout:false});});app.listen(4000);
客户代码室 1
<html><head><title>Snipet 的代码审查</title><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script><script type="text/javascript" src="http://localhost:4000/socket.io/socket.io.js"></script><脚本>$(document).ready(function() {var socket = io.connect('http://localhost:4000');$("#msgbox").keypress(函数(事件){if (event.which == '13') {发送消息();event.preventDefault();}});socket.on('connect', 函数(数据){socket.emit('加入房间', 'room1');});socket.on('message', function (data) {添加消息(数据);});函数 add_message(m) {$("#chatlog").append(m);$("#chatlog").append("
");}函数 sendmsg(){var r = $("#msgbox").val();socket.emit('message', r);add_message(r);$("#msgbox").val('');}});头部><身体><div id="chat" style="height: 200px; width: 200px; border: 1px solid gray;"><div id="chatlog" style="height: 178px; width: 200px; overflow-y: scroll;"></div><input type="text" id="msgbox" style="margin-left: 2px; width: 193px;">