Nie jestem jeszcze ekspertem, w każdym razie dziękuję za pomoc. Stworzyłem witrynę internetową z dwiema różnymi stronami. Teraz chcę mieć dwa różne czaty, jeden dla pierwszej strony, a drugi dla drugiej. Muszę użyć socket.io. Właściwie już zaimplementowałem kod, aby uzyskać jeden działający czat, ale kiedy piszę coś na tym czacie, wiadomość pojawia się nawet na drugim. Oznacza to, że oba czaty są ze sobą połączone. To jest problem, ponieważ chcę, aby były niezależne. Czy chciałbym, żeby pracowali z własnymi stronami, które mają przycisk wysyłania, pole do wpisania wiadomości i pole do wpisania twojego imienia i nazwiska. Tak więc obie strony mogą działać samodzielnie, ale nie wiem jak. Mój kod jest podzielony na 2 strony: index.js i chat.js. Tutaj jest Index.js:

var express = require('express');
var socket = require('socket.io');
//app setup
var app = express();
var server = app.listen(8080, function(){
console.log('ascoltando la richiesta alla porta 8080');
});
//static 
app.use(express.static('public'));
//socket setup
var io = socket(server);
io.on('connection', function(socket){
console.log('fatta la connessione socket', socket.id);
socket.on('chat', function(data) {
io.emit('chat', data); 
});
socket.on('typing', function(data) {
socket.broadcast.emit('typing', data);
});
});

A oto kod umieszczony w chat.js (który jest plikiem z linkiem na jednej stronie html, druga strona nie jest aktualnie z niczym powiązana):

//connessione
var socket = io.connect('http://localhost:8080'); // è una variabile socket diversa da quella in                 index.js
//query
var message= document.getElementById('message'); 
var handle = document.getElementById('handle');
var button = document.getElementById('send');
var output = document.getElementById('output');
var feedback = document.getElementById('feedback');
//scrollbar sempre in basso
function updateScroll(){
var element = document.getElementById("output");
element.scrollTop = element.scrollHeight;
} 
//emit eventi
button.addEventListener('click',function() {
socket.emit('chat', {
message: message.value,
handle: handle.value
}); 
});
message.addEventListener('keypress', function() {
socket.emit('typing', handle.value);
});
//listen eventi
socket.on('chat', function(data){
if (data.message !== "" & data.handle !== "") {
if (handle.value === data.handle) {
    feedback.innerHTML= "" ;
    output.innerHTML +='<p id=inviato>' +'<span id="utente">'+'Tu' +'</span> <br> ' +    data.message +'</p> <br>';
    updateScroll();
    document.getElementById('message').value='';
} else {
    feedback.innerHTML= "" ;
    output.innerHTML +='<p id=ricevuto>' +'<span id="utente">'+data.handle +'</span> <br> '   + data.message +'</p> <br>';
    updateScroll();
    document.getElementById('message').value='';
}
} 
});
socket.on('typing', function(data) {
feedback.innerHTML = '<p>'+ data + ' sta scrivendo...' + io.engine.clientsCount;
});

Dziękuję bardzo

0
Emanuele Elias 20 grudzień 2019, 00:06

2 odpowiedzi

Możesz to osiągnąć, używając przestrzeni nazw. Oto dokumentacja przestrzeni nazw.

Zasadniczo to nasłuchuje zdarzeń emitowanych z pewnych przestrzeni nazw, tj. Ścieżek.

Możesz utworzyć dwa oddzielne obiekty, po jednym dla każdej żądanej przestrzeni nazw, a następnie dodać funkcjonalność do każdego z tych obiektów.

Oto przykładowy kod:

var io = require('socket.io')(server);

var room1 = io.of('/room1');
var rooms2 = io.of('/room2');

room1.on('connection', function(socket) {
  ...
});

room2.on('connection', function(socket) {
  ...
});

Pamiętaj, że musisz połączyć się z odpowiednią przestrzenią nazw za pomocą JavaScript po stronie klienta

var socket = io.connect('localhost:8080/room1');
0
DWuest 20 grudzień 2019, 16:18
Dziękuję, ale to nie działa. Prawdopodobnie popełniłem kilka zadań. Czy mógłbyś mi pomóc?
 – 
Emanuele Elias
20 grudzień 2019, 22:34

Dziękuję, ale prawdopodobnie nie zrozumiałem, ponieważ to już nie działa: kiedy naciskam przycisk wysyłania, nic się nie dzieje. tutaj są zaktualizowane dwa kody. index.js:

var express = require('express');
var io = require('socket.io')(server);

//app setup
var app = express();
var server = app.listen(8080, function(){
console.log('ascoltando la richiesta alla porta 8080');
});


//static 
app.use(express.static('public'));

//socket setup 

var room1 = io.of('/room1');
var room2 = io.of('/room2');


room1.on('connection', function(socket){
console.log('fatta la connessione socket', socket.id);
socket.on('chat', function(data) {
   io.emit('chat', data); 
});
socket.on('typing', function(data) {
    socket.broadcast.emit('typing', data);
});


});
room2.on('connection', function(socket){
console.log('fatta la connessione socket', socket.id);
socket.on('chat', function(data) {
   io.emit('chat', data); 
});
socket.on('typing', function(data) {
    socket.broadcast.emit('typing', data);
});


});

Chat.js:

//connessione
var socket = io.connect('http://localhost:8080/room1');// è una variabile socket       diversa da quella in index.js


//query
var message= document.getElementById('message'); 
var handle = document.getElementById('handle');
var button = document.getElementById('send');
var output = document.getElementById('output');
var feedback = document.getElementById('feedback');
//scrollbar sempre in basso
function updateScroll(){
var element = document.getElementById("output");
element.scrollTop = element.scrollHeight;
}
//emit eventi
button.addEventListener('click',function() {
socket.emit('chat', {
   message: message.value,
   handle: handle.value
}); 
});
message.addEventListener('keypress', function() {
socket.emit('typing', handle.value);
});

//listen eventi
socket.on('chat', function(data){
if (data.message !== "" & data.handle !== "") {
    if (handle.value === data.handle) {
        feedback.innerHTML= "" ;
        output.innerHTML +='<p id=inviato>' +'<span id="utente">'+'Tu' +'</span> <br> ' + data.message +'</p> <br>';
        updateScroll();
        document.getElementById('message').value='';
    } else {
        feedback.innerHTML= "" ;
        output.innerHTML +='<p id=ricevuto>' +'<span id="utente">'+data.handle +'</span> <br> ' + data.message +'</p> <br>';
        updateScroll();
        document.getElementById('message').value='';
    }
} 

});


socket.on('typing', function(data) {
feedback.innerHTML = '<p>'+ data + ' sta scrivendo...' + io.engine.clientsCount;
});
0
Emanuele Elias 20 grudzień 2019, 22:33
Przepraszam za spóźnienie, bolączki świąteczne :P W każdym razie musisz dostosować sposób wysyłania wiadomości, zmienić io.emit(..., ...) na socket.broadcast.emit(..., ...)
 – 
DWuest
28 grudzień 2019, 02:15