【发布时间】:2015-12-15 22:04:01
【问题描述】:
我想写一个简单的聊天来获得实践经验。
好的,但我无法获取 socket.nickname 来通知加入/离开房间。 (当我试图通过它时,他总是难过一个'未定义')。
现在好了,尝试创建房间列表
更新代码:
client.js:
$('#roomForm').submit(function() {
socket.emit('createRoom', $('#roomName').val());
$('#roomForm').hide();
$('#chatForm').show();
return false;
});
socket.on('message', function(data) {
newMessage(data);
});
socket.on('showRooms', function(rooms) {
console.log(rooms);
for(var i = 0; i < rooms.length; i++) {
$('#rooms').append($('<li>')
.append($('<form id="freeRoom">')
.append($('<span id="room">').text(rooms[i] + ' ///'))
.append($('<button>').text('connect'))));
};
});
$('#freeRoom').submit(function() {
socket.emit('connectToRoom', $('#room').text());
return false;
});
server.js:
io.on('connection', function(socket) {
socket.on('sendNickname', function(username) {
socket.username = username;
users.push(socket.username);
socket.emit('showRooms', rooms);
});
socket.on('disconnect', function() {
socket.broadcast.to(socket.room).emit('notice', socket.username + ' has left the room');
users.splice(users.indexOf(socket.username), 1);
socket.emit('showRooms', rooms);
});
socket.on('message', function(data) {
socket.broadcast.to(socket.room).emit('message', data);
});
socket.on('createRoom', function(room) {
socket.leave(socket.room);
socket.room = room;
rooms.push(socket.room);
socket.join(socket.room);
socket.emit('showRooms', rooms);
console.log('Rooms: ' + rooms);
socket.broadcast.to(socket.room).emit('notice', socket.username + ' has joined to room');
});
socket.on('connectToRoom', function(room) {
console.log('Will connect to that room: ' + room);
socket.join(room);
});
});
**更新 2:** 尝试连接免费创建的房间:
$('#freeRoom').submit(function() {
socket.emit('connectToRoom', $('#room').text());
return false;
});
附:还有...对不起我的英语>.
【问题讨论】:
-
向我们展示您在客户端使用的代码,您如何连接?你确定 socket.on('connect', ...) 中的函数被调用了吗?
-
@misko321 Ofc,但我无法在服务器端获取用户,添加了 clients.js
-
最佳解决方案在这里 - stackoverflow.com/a/39711590/984471
标签: javascript node.js web socket.io