向聊天室发送消息 socket.io 节点.js
Sending message to rooms socket.io node.js
我正在尝试在node中构建我的第一个应用程序.js - 聊天。我在向相应房间发送消息时遇到问题。socket.room 没有存储,我认为这是因为我每次都尝试通过刷新页面加载视图,而不是通过 Ajax。可以使用此代码吗?
服务器.js
var express = require('express')
, http = require('http')
, app = express()
, server = http.createServer(app)
, io = require('socket.io').listen(server)
, path = require('path')
, jade = require('jade');
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set("view options", {layout: false});
app.configure(function() {
app.use(express.static(__dirname + '/public'));
});
app.get('/', function(req, res) {
res.render('home.jade');
});
app.get("/rooms", function(req, res) {
res.render('rooms.jade');
});
app.get("/music", function(req, res) {
res.render('music.jade');
});
app.get("/art", function(req, res) {
res.render('art.jade');
});
io.sockets.on('connection', function(socket) {
socket.on('joinRoom', function(data) {
console.log(data + ' joined');
socket.room = data;
socket.join(data);
});
socket.on('message', function(data) {
io.sockets.in(socket.room).emit('sendMess', data.message);
})
});
server.listen(3000);
客户端.js
var socket = io.connect();
$(document).ready(function() {
$('.submit').on('click', function(e) {
e.preventDefault();
var user = $('.user').val();
$.ajax({
url: 'rooms'
}).done(function(data) {
$('body').html(data);
console.log(user);
})
})
$('#rooms').on('click', 'a', function() {
var $this = $(this),
room = $this.data('name');
joinRoom(room);
});
$('#conversation').find('.send').on('click', function() {
var txt = $(this).prev('.message').val();
console.log(txt);
socket.emit('message', {message: txt});
})
socket.on('sendMess', function(data) {
$('<p>' + data + '</p>').insertAfter($('#conversation'));
})
})
function joinRoom(data) {
socket.emit('joinRoom', data);
}
首页.翡翠
include header.jade
body
div.container
header
h1 A Chat application
form(name="input", action="", method="post")
| Username:
input(type="text", name="user", class="user")
input(type="submit", value="Login", class="submit")
客房.翡翠
include header.jade
body
div.container
header
h1 ROMS
div#rooms
h2 Join to room
a(data-name='music', href='music') Music
a(data-name='art', href='art') Art
音乐/艺术翡翠
include header.jade
body
div.container
header
h1 MUSIC ROOM
div#rooms
h2 Join to room
a(data-name='music', href='music') Music
a(data-name='art', href='art') Art
div#conversation
input(type="text", name="message", class="message")
button(class="send") Send
设置socket.room
不会使其持久化,您必须自己存储它(例如:在数据库中)
相关文章:
- 节点.js socket.io 网络服务器提供索引.html以外的其他文件
- 节点.js和 socket.io 计时器重置
- Socket.io 不工作,节点Js
- 向聊天室发送消息 socket.io 节点.js
- Socket.IO 在节点上使用基本身份验证
- 节点:建立连接时备份 socket.io 自定义发射器
- Socket.io 在两个节点.js应用之间触发事件
- 节点/套接字 IO 多个播放器
- 节点.JS - 简单的 Socket.IO 示例不起作用.获取调试 - 提供静态内容/socket.io.js(Mac
- 如果在节点 JS 中落后于 Socket.IO,则丢弃数据包
- Socket.io 两个节点应用程序
- 节点.js /socket.io/socket.io.js 找不到
- 节点.js无需 Socket.IO 即可聊天
- socket.io 和节点.js之间的区别
- 节点.js / socket.io - 跟踪客户端
- 向节点.js和 socket.io 中的单个套接字发送消息
- 在节点.js websocket 连接 (socket.io) 中获取客户端的 IP
- 节点.js:删除 Socket.IO 中的用户
- 找不到模块“快递” |socket.io [节点.js]
- 套接字IO节点,用于向所有客户端广播数据