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(); } }
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); } }); }
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; }
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); }