javascript 我如何获得 socket.username ?(socket.io)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32657379/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How I can get a socket.username ? (socket.io)
提问by vagabund
I want to write a simple chat for practical experience.
我想写一个简单的聊天,以获得实践经验。
All right, but I can't get a socket.nickname for notice a join/leave from the room. (when I tried pass its, he always sad a 'undefined').
好的,但我无法获得 socket.nickname 以通知加入/离开房间。(当我尝试通过它时,他总是悲伤一个“未定义”)。
Now all right, tried to create list of rooms
现在好了,尝试创建房间列表
UPDATE CODE:
更新代码:
client.js:
客户端.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:
服务器.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);
});
});
**UPD 2: ** Tried to connect free created room:
**UPD 2:** 尝试连接免费创建的房间:
$('#freeRoom').submit(function() {
socket.emit('connectToRoom', $('#room').text());
return false;
});
P.S. And... Sorry for my english >.<
PS 和...对不起我的英语>.<
回答by misko321
The event name that you emit, that is 'connect'is reserved in Socket.ioalong with 'message'and 'disconnect':
您发出的事件名称,即'connect'与'message'和'disconnect'一起保留在Socket.io 中:
http://socket.io/docs/#sending-and-receiving-events
http://socket.io/docs/#sending-and-receiving-events
Socket.IO allows you to emit and receive custom events. Besides connect, messageand disconnect, you can emit custom events:
...
Socket.IO 允许您发出和接收自定义事件。除了 connect,message和disconnect,您还可以发出自定义事件:
...
Change it to something else, e.g:
将其更改为其他内容,例如:
Server.js:
服务器.js:
io.on('connection', function(socket) {
socket.on('send-nickname', function(nickname) {
socket.nickname = nickname;
users.push(socket.nickname);
console.log(users);
});
...
Client.js
客户端.js
socket.emit('send-nickname', nickname);