Merhabalar,
Vibe.d 'deki bir bugdan dolayı nerdeyse 1 aydır tıkandım kaldım. Bir programda 2 tane web-socket açılamıyor. Vibe.d 'e bildirmeme rağmen 1 aydır cevap alamadığım için her bir açacağım socket için bir proses yaratmaya ve sonra bu prosesden ZMQD ile cevap almaya karar verdim .
Kod ise şöyle birşey :
Benim büyük projem şu aşağıdaki minimal örnekte olduğu gibi bir sürü proses oluşturacak:
Socket*[] socketList;
string sRecv( Socket* socket)
{
ubyte[256] buffer;
immutable size = socket.receive(buffer);
import std.algorithm: min;
return buffer[0 .. min(size,256)].idup.asString();
}
void startServer( string servername )
{
auto pid = spawnProcess(["/home/erdem/eclipse-workspace/WebSocketDenemesi/websocketdenemesi", servername]);
auto requester = new Socket(SocketType.req);
auto allName = "ipc:///tmp/" ~ servername;
requester.connect(allName);
socketList ~= requester;
}
void main() {
startServer("btcethtrade");
startServer("btciotadepth");
startServer("btciotatrade");
for (int requestNbr = 0; requestNbr != 10; ++requestNbr) {
foreach ( requester; socketList)
{
requester.send("Hello");
}
foreach ( requester; socketList)
{
auto str = sRecv(requester);
writefln("Received reply %d [%s]", requestNbr, str);
}
}
}
Ve oluşturulan bir sürü küçük proseslerde şunun gibi olacaklar:
string sRecv(ref Socket socket)
{
ubyte[256] buffer;
immutable size = socket.receive(buffer);
import std.algorithm: min;
return buffer[0 .. min(size,256)].idup.asString();
}
void main( string[] args ) {
auto responder = Socket(SocketType.rep);
string temp = "ipc:///tmp/" ~ args[1];
responder.bind(temp);
while (true) {
ubyte[10] buffer;
responder.receive(buffer);
writeln(args[1], " Received Hello");
Thread.sleep(1.seconds);
string message = "World from " ~ args[1];
responder.send(message);
}
Bu kadar uzun kodlardan sonra soruma geliyim.
Ben Prosesler arası iletişim olayını pek bilmediğimden düz aşağıda görülebileceği gibi request-responce socketlerini kullandım.
for (int requestNbr = 0; requestNbr != 10; ++requestNbr) {
foreach ( requester; socketList)
{
requester.send("Hello");
}
foreach ( requester; socketList)
{
auto str = sRecv(requester);
writefln("Received reply %d [%s]", requestNbr, str);
}
}
Biraz ZMQ okuyorumda daha bir sürü method varmış halbuki "Broker, Dealer" filan. Çalışıyor ama acaba yöntemimde ölümcül bir hata varmı? Çok az çaba gerektirecek güzelleştirmeler olabilirmiydi ? Acaba hangi prosesler arası iletişim method'u benim için doğru olurdu?
Erdemdem
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]