io.sockets.in 在 nativescript-socketio 中不工作
io.sockets.in not working in nativescript-socketio
我正在尝试使用 socketio 和 nodejs 在 nativescript 应用程序中构建私人聊天系统以实现实时聊天功能。
这是我用的插件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);
});
});
});
});
在浏览器上,它很适合私聊。但在我的 nativescript 应用程序上,它不起作用,除非我使用 io.emit()
而不是 io.sockets.in()
首先,你不能在 socket.join() 部分使用 socket.on(event...):
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"
});
我正在尝试使用 socketio 和 nodejs 在 nativescript 应用程序中构建私人聊天系统以实现实时聊天功能。
这是我用的插件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);
});
});
});
});
在浏览器上,它很适合私聊。但在我的 nativescript 应用程序上,它不起作用,除非我使用 io.emit()
而不是 io.sockets.in()
首先,你不能在 socket.join() 部分使用 socket.on(event...):
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"
});