#javascript #node.js #socket.io #nativescript
#javascript #node.js #socket.io #nativescript
Вопрос:
я пытаюсь создать систему приватного чата в приложении nativescript, используя socketio и nodejs для функции живого чата.
это плагин, который я использую https://github.com/triniwiz/nativescript-socketio /
Он хорошо работает как групповой чат, но я хочу сделать его приватным. итак, я искал и видел io.sockets.in().emit
, что я должен использовать, а не io.emit()
это то, что я пробовал
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on('privatechatroom', function(data){
socket.join(data.chatid, function () {
io.sockets.in(data.chatid).emit('joined', { mes: 'Joined chat room' data.chatid });
socket.on('chat message', (data) => {
console.log('message: ' data.message);
//io.emit('chat message', );
io.sockets.in(data.chatid).emit('chat message', { message: data.message, type: data.type, date: data.date, sender: data.sender });
});
socket.on('typing', (msg) => {
console.log('message: ' msg);
io.sockets.in(msg).emit('typing', msg);
});
socket.on('notTyping', (msg) => {
console.log('message: ' msg);
io.sockets.in(msg).emit('noTyping', msg);
});
});
});
});
На broswer он хорошо работает для приватного чата. но в моем приложении nativescript это не работает, если я не использую io.emit()
, а не io.sockets.in()
Ответ №1:
прежде всего, вы не можете использовать socket.on(событие …) в разделе socket.join():
socket.on('privatechatroom', function(data){
socket.join(data.chatid, function () {
socket.in(data.chatid).emit('joined', { mes: 'Joined chat room' data.chatid });
});
socket.on('chat message', (data) => {
console.log('message: ' data.message);
//io.emit('chat message', );
socket.in(data.chatid).emit('chat message', { message: data.message, type: data.type, date: data.date, sender: data.sender });
});
socket.on('typing', (msg) => {
console.log('message: ' msg);
socket.in(msg).emit('typing', msg);
});
socket.on('notTyping', (msg) => {
console.log('message: ' msg);
socket.in(msg).emit('noTyping', msg);
});
});
когда вы присоединяетесь к клиенту сокета в комнате, вы должны отправлять свои сообщения непосредственно в эту комнату с помощью :
socket.to(chatid).emit('your event', {
foo:"bar"
});