несколько уникальных клиентов, использующих socket.io и express - PullRequest
0 голосов
/ 29 марта 2012

Я работаю с socket.io и express, и мне не хватает уникальных страниц, которые все отправляют и получают сообщения с сервера.

Когда я следую большинству уроков, серверный скрипт начинается с чего-товот так:

var app = require('express').createServer()
var io = require('socket.io').listen(app);
var clients = {};

app.listen(8080);

// routing
app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});

и я могу протестировать свое клиентское приложение на localhost: 8080.Но я хочу запустить несколько клиентских приложений, например, http://localhost:8080/myApp/client1.html и http://localhost:8080/myApp/client2.html.. Когда я пытаюсь это сделать, возвращается что-то вроде:

Cannot GET /myApp/client1.html

Моя цель заключается виметь две или более уникальных страниц, которые могут отправлять сообщения друг другу через сокеты.Любая помощь очень ценится.Я слишком долго ломал голову над этим.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

или добавьте динамический обработчик для ваших файлов:

app.get('/myApp/:file', function(req, res) {
    res.sendfile(__dirname+'/'+req.param('file'));
});

или немного усилить с помощью регулярного выражения:

app.get(/^\/myApp\/(.+)\.html$/, function(req, res) {
    res.sendfile(__dirname+'/'+req.params[0]);
});
1 голос
/ 29 марта 2012

Я не очень знаком с Express, но инстинкт подсказывает мне, что get () будет ссылаться на GET HTTP-запрос и, следовательно, не на веб-сокет.Я думаю, что вы должны использовать Express для возврата HTML для запросов страниц, но передача данных в режиме реального времени будет обрабатываться Socket.io.

Таким образом, вы получите возврат Express для реальных запросов страниц:

app.get('/myApp/client1.html', function(blah){});
app.get('/myApp/client2.html', function(blah){});

Тогда socket.io будет обрабатывать разговор:

var io = require('socket.io').listen(app);

io.sockets.on('connection', function (socket) {
  socket.on('msg', function (data) {
    io.sockets.emit('msg', {msg: data.msg});
  });
});

Клиент:

var socket = io.connect('http://localhost:8080');
socket.on('msg', function (data) {
  //code to add data.msg somewhere on page
});
somebutton.on('click', function(e){
  socket.emit('msg', {msg:$(e.targetElement).value()});
});

Опять же, я не знаю, Expressпоэтому у меня может быть неправильный синтаксис, но моя суть в том, что у вас есть две вещи, которые вам нужно обрабатывать отдельно.Один - это возврат реальных HTML-страниц, другой - обмен данными между загруженными страницами в режиме реального времени.Мои примеры грубые, проверьте Socket.io Readme для некоторых лучших примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...