Exemplo n.º 1
0
 listen: function(port, bindAddress) {
     var serverSocket = new Socket();
     serverSocket.listen(port, bindAddress, 100);
     serverSocket.mutex = new Mutex();
     for (var i=0; i<25; i++) {
         new Thread(Child, serverSocket, this.fn).start();
     }
 }
Exemplo n.º 2
0
 listen: function(port, bindAddress, numChildren) {
     numChildren = numChildren || 50;
     var serverSocket = new Socket();
     serverSocket.listen(port, bindAddress, 100);
     serverSocket.mutex = new Mutex();
     for (var i=0; i<numChildren; i++) {
         new Thread(Child, serverSocket, this.fn).start();
     }
     atexit(function() {
         while (true) { process.sleep(1); }
     });
 }
Exemplo n.º 3
0
exports.run = function(maxTime) {
	if (running) { throw new Error("Event loop is already running"); }
	if (!eventCount) { return false; }
	running = true;
	aborted = false;
	
	if (maxTime) { /* maximum milliseconds to run */
		exports.setTimeout(exports.abort, maxTime);
	}
	
	while (eventCount && !aborted) {
		/* prepare data for Socket.select() */
		var now = Date.now();
		var read = [], write = [], timeout = 1/0;
	
		/* find closest time */
		for (var id in events.time) {
			var diff = Math.max(0, events.time[id].ts - now);
			timeout = Math.min(timeout, diff);
		}
		if (timeout == 1/0) { timeout = null; }
		
		/* prepare socket arrays */
		for (var id in events.socket) {
			var item = events.socket[id];
			(item.read ? read : write).push(item.socket);
		}
		
		try {
			var result = Socket.select(read, write, null, timeout);
		} catch (e) {
			break;
		}

		processTime();
		if (result) { processSockets(read, write); }
		
	}
	running = false;
	return true;
}
Exemplo n.º 4
0
HTTP.ClientRequest.prototype.send = function(follow) {
	var Socket = require("socket").Socket;
	
	var items = this._splitUrl();
	var host = items[0];
	var port = items[1];
	var url = items[2];
	var ip = Socket.getAddrInfo(host);
	this.header({"Host":host});
	
	/* defaults */
	this.header({
		"Connection":"close",
		"Accept-Charset":"utf-8",
		"Accept-Encoding":"identity"
	});
	
	/* add get data */
	var get = this._serialize(this.get);
	if (get) { url += "?"+get; }
	
	/* add cookies */
	var arr = []; 
	for (var p in this.cookie) {
		arr.push(escape(p)+"="+escape(this.cookie[p]));
	}
	if (arr.length) { this.header({"Cookie":arr.join("; ")}); }

	/* add post headers */
	var post = this._serialize(this.post); 
	if (post.length) {
		this.header({
			"Content-Length": post.length,
			"Content-Type": "application/x-www-form-urlencoded"
		});
	}
	
	/* build request */
	var data = this.method + " " + url + " HTTP/1.1\r\n";
	for (var p in this._headers) {
		data += p+": "+this._headers[p]+"\r\n";
	}
	data += "\r\n";
	if (post) {
		data += post+"\r\n";
		data += "\r\n";
	}

	var s = new Socket(Socket.PF_INET, Socket.SOCK_STREAM, Socket.IPPROTO_TCP);
	s.connect(ip, port);
	s.send(data);
	
	var received = "";
	do {
		var part = s.receive(1024, true);
		for (var i=0;i<part.length;i++) {
			received += String.fromCharCode(part[i]);
		}
	} while (part.length > 0);
	s.close();
	received = Util.utf8encode(received);
	
	return this._handleResponse(received, follow);
}