Вот полный пример с сервером socket.io, веб-сервером, отправляющим очень простую страницу (она будет просто записывать все сообщения на консоль) и UDP-сокетом, который прослушивает сообщения и передает их всем подключенным клиентам:
var http = require('http'),
dgram = require('dgram'),
socketio = require('socket.io');
var app = http.createServer(handleRequest),
io = socketio.listen(app),
socket = dgram.createSocket('udp4');
socket.on('message', function(content, rinfo) {
console.log('got message', content, 'from', rinfo.address, rinfo.port);
io.sockets.emit('udp message', content.toString());
});
function handleRequest(req, res) {
res.writeHead(200, {'content-type': 'text/html'});
res.end("<!doctype html> \
<html><head> \
<script src='/socket.io/socket.io.js'></script> \
<script> \
var socket = io.connect('localhost', {port: 8000}); \
socket.on('udp message', function(message) { console.log(message) }); \
</script></head></html>");
}
socket.bind(7788);
app.listen(8000);
Обновление: Как показывает io.sockets.emit
, все сообщения, полученные через UDP-порт 7788, отправляются всем подключенным клиентам.Если вы хотите направить их на основе некоторых данных в сообщении или аналогичных, вы можете использовать функцию "room" в Socket.IO: io.sockets.of(someRoom).emit
.В обработчике соединения для Socket.IO вы можете join
каждого клиента в какую-то комнату.