Suppongo che ciò non sia possibile, ma volevo chiedere in caso affermativo. Se desidero fornire una pagina Web di informazioni sullo stato, desidero utilizzare WebSockets per trasferire i dati dal server al browser. Ma le mie preoccupazioni sono l'effetto che un grande numero di browser avrà sul server. Posso trasmettere a tutti i client piuttosto che inviare messaggi discreti a ciascun client?Posso trasmettere a tutti i client WebSocket
risposta
WebSockets utilizza TCP, che è punto a punto e non fornisce supporto di trasmissione.
Sì, è possibile e ci sono molti socket server scritti in vari linguaggi di scripting che lo stanno facendo.
Dipende dal lato server realmente. Ecco un esempio di come si fa usando Tomcat7:
Tomcat 7 Chat Websockets Servlet Example
e una spiegazione del modo in cui è costruito here.
il collegamento non funziona –
@ArchimedesTrajano Collegamento interrotto corretto. –
Lo spazio dei nomi Microsoft.Web.WebSockets ha una funzionalità WebSocketCollection con trasmissione. Cerca l'assemblea a Nuget. Il nome è Microsoft.WebSockets.
Sì, è possibile trasmettere messaggi a più client.
In Java,
@OnMessage
public void onMessage(String m, Session s) throws IOException {
for (Session session : s.getOpenSessions()) {
session.getBasicRemote().sendText(m);
}
}
e qui si è spiegato. https://blogs.oracle.com/PavelBucek/entry/optimized_websocket_broadcast.
Non sono sicuro di come si configuri il client/server, ma si può sempre conservare nel server una raccolta di tutti i client connessi, quindi scorrere su ciascuno di essi e inviare il messaggio.
Un semplice esempio usando la libreria websocket del nodo:
codice Server
var WebSocketServer = require('websocket').server;
var clients = [];
var socket = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});
socket.on('request', function(request) {
var connection = request.accept('any-protocol', request.origin);
clients.push(connection);
connection.on('message', function(message) {
//broadcast the message to all the clients
clients.forEach(function(client) {
client.send(message.utf8Data);
});
});
});
Poiché send è solo una copia nativa per i buffer del socket, questo dovrebbe essere molto veloce, ma intensivo della memoria. La maggior parte dei browser limita il numero di websocket concorrenti a meno di 256 per questo motivo. –
send() genererà eccezioni se il client è disconnesso, quindi ti consigliamo di ascoltare l'evento 'close' per rimuovere i client disconnessi. – broofa
Come già sottolineato in altre risposte, WebSockets non supportano il multicast, ma sembra che il modulo 'ws' mantiene una lista di client connessi per te, quindi è abbastanza facile iterarli attraverso di loro. Da the docs:
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({ port: 8080 });
wss.broadcast = function broadcast(data) {
wss.clients.forEach(function each(client) {
client.send(data);
});
};
- 1. Spring, come trasmettere messaggi ai client connessi tramite websocket?
- 2. Invia comando a tutti i client connessi
- 3. Client WebSocket Twisted Python
- 4. Ruby client websocket per websocket-rails gem
- 5. Client WebSocket in PHP?
- 6. Client WebSocket Kit HTTP
- 7. necessario client Websocket Java
- 8. Websocket Client in C++
- 9. Librerie client WebSocket Java (Android)
- 10. Posso creare un server websocket utilizzando JavaScript (lato client)?
- 11. Come di trasmettere tutti i porti container finestra mobile
- 12. Come posso trasmettere un tipo a un bigint in MySQL?
- 13. Come forzare TUTTI i client DHCP a rinnovare?
- 14. Avvio a molla + Websocket (SockJS)
- 15. Esiste un client WebSocket implementato per .NET?
- 16. accesso golang websocket server con client nodejs
- 17. client websocket Javascript che aggiunge cookie all'intestazione
- 18. Perché trasmettere a un'interfaccia?
- 19. Come posso trasmettere oggetti dinamicamente?
- 20. Invia un messaggio a tutti i client di un gruppo, ad eccezione del client corrente
- 21. I pacchetti TCP WebSocket si raggruppano insieme?
- 22. Come posso trasmettere una lista usando i generici in Java?
- 23. Broadcasting messaggio a tutti i client, ad eccezione di sé in SignalR
- 24. Posso passare i parametri a una pagina HTML lato client?
- 25. C# non può trasmettere bool a int
- 26. Disconnetti sessione client dal server stomp di Websocket di Spring
- 27. Posso consentire al client di trasmettere il contenuto da Spotify in un lettore basato su browser?
- 28. Come aggiungere più intestazioni nel client python websocket
- 29. Posso trasmettere Int64 direttamente in Int?
- 30. pitone tornado inviare un messaggio a tutti i collegamenti
quindi, anche con un po 'di linguaggio di scripting, la trasmissione funziona alla stessa velocità dell'invio di un messaggio uno alla volta? – boh
Un framework Websocket potrebbe facilitare la "trasmissione", ma invierà messaggi discreti sotto il cofano. Questo è il motivo per cui la maggior parte dei server e degli host limitano il numero di client connessi (il limite di Heroku era 600 client per Dyno). – Myst