Quando provo ad abbonarmi a un canale chiamato "pubblico" con Meteor , un web server specializzato per push in tempo reale usando COMET , ottengo la risposta desiderata:
<script>ch("public",0)</script>
Quando la richiesta http è:
GET /push/131530959548387383/xhrinteractive/public?nc=1315309595740 HTTP/1.1
Ma quando provo ad abbonarmi a un canale chiamato in inglese ed ebraico come: "tag- קוקאין" e la richiesta http è:
GET /push/1315309516300999786/xhrinteractive/tag-%D7%A7%D7%95%D7%A7%D7%90%D7%99%D7%9F?nc=1315309516590 HTTP/1.1
Ottengo una risposta acuta - il nome del canale è diventato punti:
<script>ch("tag-............", 0);</script>
Il file che è responsabile di capire l'intestazione utilizza questa regex:
if($self->{'headerBuffer'}=~/GET\s+$::CONF{'SubscriberDynamicPageAddress'}\/([0-9a-z]+)\/([0-9a-z]+)\/([a-z0-9_\-\%\.\/]+).*?/i)
{
$self->{'subscriberID'}=$1;
$self->{'mode'}=$2;
my $persist=$self->getConf('Persist');
my $maxTime=$self->getConf('MaxTime');
$self->{'ConnectionTimeLimit'} = ($self->{'ConnectionStart'}+$maxTime) if ($maxTime>0);
my @channelData=split('/',$3);
my $channels={};
my $channelName;
my $offset;
foreach my $chandef (@channelData) {
if($chandef=~/^([a-z0-9_\-\%]+)(.(r|b|h)([0-9]*))?$/i) {
$channelName = $1;
$channels->{$channelName}->{'startIndex'} = undef;
if ($3) {
$offset = $4;
if ($3 eq 'r') { $channels->{$channelName}->{'startIndex'} = $offset; }
if ($3 eq 'b') { $channels->{$channelName}->{'startIndex'} = -$offset; }
if ($3 eq 'h') { $channels->{$channelName}->{'startIndex'} = 0; }
}
}
}
Potrei aggiungere che Meteor è un proprio server di comete. il suo scopo è quello di inviare notifiche in tempo reale: meteorserver.org
Deve esserci una soluzione per questo da qualche parte .. Ho provato a cercare ovunque senza risultati. Sarò grato se qualcuno mi indicherà una direzione.