[OSM-Devserver] Kommunikation mit Tirex-Master

Jochen Topf jochen at remote.org
Mo Mär 28 19:05:30 CEST 2011


On Mon, Mar 28, 2011 at 05:50:21PM +0200, Peter Körner wrote:
> Am 28.03.2011 16:59, schrieb Jochen Topf:
> >On Mon, Mar 28, 2011 at 04:41:48PM +0200, Peter Körner wrote:
> >>was ist der vorgesehene Weg für eine externe Anwendung, Requests an
> >>den Tirex-Master zur Bearbeitung zu senden?
> >>  - Über den Unix-Socket /var/run/tirex/master.sock
> >
> >Ja. Siehe tirex-batch und tirex-send, wie das zu machen ist.
> 
> Ist es überhaupt möglich, über den dgram-Socket eine
> Render-Anforderung zu senden und eine Antwort zu bekommen, wenn das
> Tile fertig ist?

Ja, das sollte gehen.

Einfache Beispiel:
tirex-send -d ping

Kommt da was zurück?

Der Server sollte die Antwort dahin zurückschicken, woher er den
Request bekommen hat.

> Wenn ich eine Nachricht mit id an den Master schicke, schmiert
> dieser mit der Meldung "send: Cannot determine peer address at
> /usr/share/perl5/Tirex/Source/Command.pm line 166" ab.

Und das kommt dann, wenn der Server nicht weiss, wohin. (Wobei das
ein Fehler ist, dass er abschmiert, das sollte natürlich nicht
passieren.)

> Beispielprogramm in nodejs:
> 
> var dgram = require('dgram');
> 
> var message = new Buffer(serialize_tirex_msg({
> 	id:   'foo',
> 	type: 'metatile_enqueue_request',
> 	prio: 10,
> 	map:  'test',
> 	x:    0,
> 	y:    0,
> 	z:    0
> }));
> 
> var client = dgram.createSocket('unix_dgram', function(buf, rinfo)
> {
> 	console.log('incoming');
> });
> 
> //client.bind('/var/run/tirex/master.sock');

Kann sein, dass Du hier auf was binden musst:
client.bind('/var/run/tirex/client.sock');

Vielleicht geht auch
client.bind('');
oder so, um eine "versteckte" Adresse zu generieren.

> client.send(message, 0, message.length,
> '/var/run/tirex/master.sock', function()
> {
> 	console.log('msg sent');
> });


Jochen
-- 
Jochen Topf  jochen at remote.org  http://www.remote.org/jochen/  +49-721-388298