Tag: http

HAProxy不保持HTTP连接打开

我有一个Node.js服务器使用服务器发送事件(SSE)来允许推送通知连接的Web客户端。 当浏览器直接与节点对话时,它工作的很好。 但是,当我把haproxy放在中间时,为了达到其他要求,生产线必须每隔30秒closures并重新打开(感谢SSE的自动重新连接)。 我已经改变了,并尝试了我所知道的一切,并可以在haproxyconfiguration中在线find。 大多数信息都在那里,在他们的文档示例中涉及套接字,但是对于SSE的支持却很less。 它应该支持SSE的持久HTTP连接吗? 如果是的话,configuration它有什么窍门? 我的configuration如下:全局守护进程#最大并发连接数maxconn 4096#删除端口绑定后的权限用户nobody组nogroup#在文件中存储进程的pid pidfile /var/run/haproxy.pid#为stats stats创build此套接字socket /无功/运行/socketsHAProxy的 defaults log global mode http # disable logging of null connections option dontlognull # I've tried all these to no avail #option http-server-close #option httpclose option http-keep-alive # Add x-forwarded-for header to forward clients IP to app option forwardfor # maximum time […]

从服务器redirect而不影响浏览器历史logging

我正在使用NodeJS和expression。 现在,无论用户在端点/页面上发布什么东西,我都会通过response.redirect()发送一个302到同一页面,以避免用户意外地重新发布数据。 但是,后面的历史出现问题。 即使url是完全一样的,浏览器似乎把它放入历史(用最新的Chrome浏览器进行testing),并发布几次到页面然后回去让我去同一页面的时间,我当然想避免。 怎么做?

iOS – 使用Websockets进行自动完成

我正在构build一个iOS应用程序,允许用户在大型数据库中search书籍。 我们希望实现一个“自动完成”function,在用户input时从服务器检索标题,以在表格视图中提供build议(我们的后端使用排名algorithm来获取相关结果)。 我们正在使用Starscream框架来实现Websockets,但是我想获得一些关于实现此function的最佳方式的build议。 到目前为止,我已经提出了两个select: 用户启动应用程序时打开Websocket连接,并在整个会话中保持此连接。 networking连接的变化将导致pipe道被破坏,所以需要使用客户端ping来检测这个并build立一个新的连接。 当用户点击search栏开始input时,打开Websocket连接。 只有在search栏处于活动状态(键盘存在时)时,连接才会保持打开状态,并且在键盘被解除时断开连接。 有一件事要记住,应用程序有多个视图和function,不涉及search,实际上需要自己的连接(例如,消息function当前使用自己的WebSocket连接发送/接收来自其他用户的消息,其他视图从REST API下载内容)。 所以这引出了另一个问题: 从同一个应用程序同时维护多个WebSocket连接是否有缺点? 另外,有哪些好的做法可以用来确保连接通过networking转换(即从WiFi到蜂窝)保持活跃? 这个问题我有很多问题,特别是在消息服务方面。 任何build议/这个话题的帮助将不胜感激。 作为参考,我们的服务器使用Node.js和Websockets的ws框架。

使用Express时出现“错误:套接字挂断”

当客户端刷新的同时仍然加载一个页面(所以套接字被终止,而我仍在处理请求)时,节点继续退出。 错误: [ERROR] – Error: socket hang up at createHangUpError (http.js:1472:15) at Socket.socketCloseListener (http.js:1522:23) at Socket.EventEmitter.emit (events.js:95:17) at TCP.close (net.js:465:12) (at lib/Maintenance.js:38) 我试着附加on('error', …到: req对象 listen的返回值(我正在使用Express) 我的get , use和post方法的返回值。 然而,我似乎无法捕捉到这个错误。 它仍然被抛出,没有我的error handling程序反应。 我可能会错过什么?

我的http请求有什么问题

我能够input我的url:192.168.1.132到我的浏览器,我得到正确的响应与“你好世界”,同样的事情,如果我做一个curl192.168.1.132 但如果我运行这个代码 var http = require('http'); var options = { host: 'http://192.168.1.132', path: '/' }; callback = function(response) { var str = ''; //another chunk of data has been recieved, so append it to `str` response.on('data', function (chunk) { str += chunk; }); //the whole response has been recieved, so we just print it out […]

如何在使用iojs创buildhttp请求时捕获EHOSTDOWN套接字错误?

我有一个简单的iojs http服务器,与我的开发机器上的另一个http后端进行通信。 现在我的IP已经改变,后端请求将不会工作,由于错误的IP。 我有(或至less是这样认为)错误pipe理,但是由于未处理的exception,在某些情况下,服务器崩溃: 当执行2个后续请求时,第一个请求会“挂起”,然后第二个请求会使服务器崩溃: events.js:141 throw er; // Unhandled 'error' event ^ Error: connect EHOSTDOWN 192.168.1.11:80 – Local (192.168.1.10:54125) at Object.exports._errnoException (util.js:846:11) at exports._exceptionWithHostPort (util.js:869:20) at connect (net.js:840:14) at lookupAndConnect (net.js:933:5) at Socket.connect (net.js:902:5) at Agent.exports.connect.exports.createConnection (net.js:61:35) at Agent.createSocket (_http_agent.js:177:16) at Agent.addRequest (_http_agent.js:147:23) at new ClientRequest (_http_client.js:132:16) at Object.exports.request (http.js:30:10) 有问题的错误将不会触发backRequest.on("error", errFn) ,它不是一个标准错误,如function(err, response, […]

如何解决Node.js进程中的ESOCKETTIMEDOUT / ECONNRESET错误

这是一个相当复杂的情况,所以我只是描述一下大局。 我们已经有几个星期了错误,所以任何想法,将不胜感激。 我们有四个networking跳跃: client (Node.js) | AWS ELB | routing proxy service (Node.js) | Squid proxy | the internet 我们正在观察以下错误: 客户 ESOCKETTIMEDOUT 套接字挂断 截断的响应(部分JSON,在中间的某个点切断) getaddrinfo ENOTFOUND 在极端情况下,我们也会看到Postgres和Redis连接出现networking错误 ELB 有时我们观察到浪涌队列填满并丢弃连接。 这似乎已经通过启动更多的路由器盒来解决。 路由代理 ECONNRESET 超时 EMFILE 我们试过了什么? 增加Node.js HTTP代理的maxSockets值 增加最大打开的文件ulimit值 增加TCP somaxconn 监视连接池大小(通常在正常范围内) 任何想法赞赏。

在Node.js中发送多个HTTP请求:没有收到任何响应或超时

我正在处理维基百科文章,并希望收到所有维基百科文章的列表。 为了做到这一点,我经常发送http请求到维基百科API,它允许你在时间接收500个标题,并且还返回一个apcontinuestring,当在下面的请求中使用时,将返回从该string开始的标题。 为了做到这一点,我使用agentkeepalive模块: var http = require('http'); var Agent = require('agentkeepalive'); var keepaliveAgent = new Agent({ keepAlive: true, maxSockets: 5, timeout: 5000, keepAliveTimeout: 3000 }); 要发送一个http请求到维基百科,我使用下面的代码: function wikipediaApiCall(params, callback) { var options = { host: 'en.wikipedia.org', path: '/w/api.php?' + createParamString(params), method: 'GET', agent: keepaliveAgent }; var callbackFunc = function(response) { var err; var str = […]

Http请求正在返回比预期的更多的数据

由于我不能评论这个问题的答案, 所以我想在这里提供一些帮助。 我有完全相同的代码,但输出如下所示: /** * Created by Ramiro on 09/06/2015. */ // Load the http module to create an http server. var http = require('http'); // Configure our HTTP server to respond with Hello World to all requests. var server = http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); //console.log(dbHandler.GetDatabase()); var req = http.request('http://127.0.0.1:5984/_myUri', function(res) { […]

为什么我在Node的HTTP服务器上有这么多连接事件?

我有一个使用socket.io的Web应用程序。 它在本地机器上运行localhost:8000。 为了在我的应用程序中find令人讨厌的资源泄漏,我尝试在我的HTTP服务器上注销连接事件: server.on('connection', function(conn) { //log out connection details }); 在页面加载后,当我在浏览器中打开页面时,可以在日志中看到多个连接事件 – 如下所示: connection established: 127.0.0.1:54148 connection established: 127.0.0.1:54149 connection established: 127.0.0.1:54146 connection established: 127.0.0.1:54152 connection established: 127.0.0.1:54144 connection established: 127.0.0.1:54155 奇怪的是,我没有创build一个WebSocket连接后,页面加载 – 只有当用户点击一个button。 但是我没有点击任何button,我仍然看到这些奇怪的联系。 如果我点击我的button来连接到我的服务器socket.io日志显示一个新的连接: connection established: 127.0.0.1:54155 幸运的是,我在日志中看到的每个连接都在一段时间后closures – 所以我猜这不能成为我资源泄露的原因。 但我仍然好奇:是什么原因导致这些连接事件? 为什么端口号这么奇怪(不是我的服务器监听的8000)? 编辑: 我的服务器configuration不是一个特殊的。 在server.js : var express = require('express'); var app […]