Articles of 套接字

具有容错和持久消息存储的Websockets服务器

我开始尝试使用websockets。 有谁知道一个websocket服务器(开源或付费),提供了一个持久的websocket“渠道”存储? 我find的所有例子都没有提到耐用性 – 如果websocket服务器停机,所有“通道”数据都将丢失。 Pusher等服务并没有真正讨论它们是否解决了耐久性问题(我还没有收到技术支持的回应)。 很高兴推出自己的,但宁可不重新发明轮子。 编辑: 我不是在寻找websockets 101的信息。 这是容易获得和理解。 我正在寻找一个支持websocket的服务器(开源或付费),并有一个持久的websocket数据存储,以便在服务器发生故障的情况下,新的服务器可以接pipe原来的服务器。 两个主要目的:1.支持websocketsnetworking工作组http://tools.ietf.org/html/draft-ibc-websocket-dns-srv-02#section-5.1设想的故障转移scheme(最重要的是,在客户端连接到故障转移服务器时发送)2.支持新的订户必须接收所有以前发布的消息的情况。 当然,这可以在应用程序层处理…但这不是我所期待的。 编辑 所以,经过一番研究,以下安装的选项似乎是最强大的: Kaazing Migratory Migratory( http://migratory.ro ) 托pipe的服务看起来“真实” 推(很棒的API,但没有历史function) PubNub(有历史) 如果websocket不可用,所有上述服务都可以优雅地回退到其他通信方式。 我无法find任何开箱即用的“开箱即用”群集,故障转移和持久的消息存储来播放历史logging。 有一些项目可以作为一个很好的起点,但不是我正在寻找的东西。

MySQL守护进程locking问题

昨天晚上,我的MySQL服务器出乎意料地停了下来。 试图重新启动( service mysql restart – 我是根),它只是挂起。 使用mysql -u root -p命令,我得到ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 。 然后我尝试手动启动守护进程( mysqld )。 提示会挂起大约2秒钟,然后返回。 仔细检查错误日志,我得到: 2016-01-22T19:18:32.399584Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock. 2016-01-22T19:18:32.399622Z 0 [ERROR] Unable to setup unix socket lock file. 2016-01-22T19:18:32.399646Z 0 [ERROR] Aborting 然后我尝试了chown […]

Nginx到Apache的反向代理,指示使用unix套接字

我的Nginx反向代理与webserver(apache)在同一台机器上工作如下 server { server_name site.net; location / { proxy_pass http://localhost:82; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 现在,而不是使用TCP连接到后端apache,我怎么能调整它使用unix套接字? 编辑: 有人可以帮助完整的stream程,指示Apache也听取unix套接字

有一个负载平衡器允许您重新使用套接字连接?

我有一个服务器上传20kb xml文件到我的服务器。 没有会话,这是一个单一的POST请求,就是这样。 每个请求都基于xml文件的内容进行validation。 有插槽相关的调整,我将不得不作出的负载testing时,服务器耗尽其套接字池(32K)。 无论如何,我想知道当我将一个负载平衡器带入两个Web服务器之间循环请求的等式中时,可能会发生什么变化。 负载平衡器可以重新使用套接字吗? 再一次,只是想清楚,客户端服务器正在发布一个文件到我的服务器,一旦文件已被HTTP发布,他们是100%完成。 任何后续的httppost将被视为新的“交易”。

杀死CLOSE_WAIT套接字而不杀害Linux上的父进程

Tomcat离开我的CLOSE_WAIT套接字最终饱和最大连接数。 我已经尝试了很多方法在我的客户端和服务器代码来摆脱这些无济于事,包括closures连接,调用System.gc()等。 现在我正试图find一种方法来简单地在操作系统中快速排除这些问题。 我有conntrack工作,但不知道如何使用它来杀死这些连接。 我也设置了/ proc / sys / net / ipv4 / netfilter / ip_conntrack_tcp_timeout_close_wait为1,这当然太低了,但连接仍然存在。 有没有办法杀死这些僵尸套接字? 运行Ubuntu。

在同一台服务器上运行websocket服务器和http服务器

我正在使用nginx来服务PHP应用程序的一个实例,并且同时运行一个Ratchet应用程序来侦听一个websocket连接。 问题是,这两个实例都使用相同的端口(80)。 我如何设置服务器,以便我可以同时服务? 编辑:刚回来看到这个问题已经下了好几次,可以理解的是,我没有真正清楚地问这个问题。 我为此道歉。 尽pipe我做了尽职调查。 我会尝试澄清我所问的,我可能误解了websocket协议的某些方面,在这种情况下,请纠正我: 我很清楚,只有一个进程监听一个特定的端口,实际上我遇到的一些问题是整个websocket的事情,据我所知,一个websocket请求以HTTP握手开始,之后会有一个机制将该会话“升级”到特定的端口。 从我周围看来,这个升级机制似乎是由networking服务器处理。 那么,如何configurationnginx来处理这个过程呢? 总而言之,我关心的是在80端口以外的端口上运行websocket服务器的一件事是端口被阻塞的可能性。 这种担忧是没有根据的吗? 任何build议,我应该如何设置?

改变/ proc / sys / net / ipv4 / tcp_tw_reuse的值是否危险?

我们有几个生产系统最近被转换成虚拟机。 我们的应用程序经常访问MySQL数据库,并为每个查询创build一个连接,查询并断开连接。 这不是查询(我知道)的适当的方式,但我们有我们似乎无法解决的约束。 无论如何,问题是这样的:虽然机器是一个物理主机,程序运行良好。 一旦转换到虚拟机,我们注意到数据库的间歇性连接问题。 有一次,在TIME_WAIT有24000+套接字连接(在物理主机上,我看到的最多的是17000 – 不好,但不会造成问题)。 我想这些连接被重用,以便我们不会看到连接问题,所以: 问题: 可以设置tcp_tw_reuse的值为1吗? 什么是明显的危险? 有什么理由我不应该这样做吗? 另外,还有没有其他办法可以让系统(RHEL / CentOS)阻止如此多的连接进入TIME_WAIT,或者让它们被重用? 最后,改变tcp_tw_recycle会做什么,并会帮助我? 提前,谢谢!

Siege:描述符表full sock.c:119:打开的文件过多

我试图在我自己的服务器上使用以下命令使用siege进行压力testing: $ siege -c 500 myweb.com/somefile.php 但是我得到这个错误: [error] descriptor table full sock.c:119: Too many open files 我也得到这个警告: libgcc_s.so.1 must be installed for pthread_cancel to work 但我使用Ubuntu 15.04(开发分支),我已经安装了包libgcc1,所以我不知道为什么它抱怨.so共享库。 我怎样才能解决太多打开的文件和libgcc警告?

Haproxy负载均衡与HTTP头

我们正在使用HAProxy来平衡我们的websocket和comet应用程序。 有一个HAProxy和3个应用程序在后面运行。 我们使用HTTP基本身份validation(我们将在未来使用其他types的身份validation,如OAuth)来识别连接的用户。 我们不能使用常规循环,因为给定用户的连接最终在同一台服务器上是非常重要的。 在哪里并不重要,但重要的是他们使用相同的服务器。 我知道HAProxy是一种基于cookie的智能方法,但不幸的是,在我们的情况下,有时候,同一个用户将被连接到不同的机器上,所以cookie不能工作)。 是否可以使用HTTP授权标头的哈希来执行负载平衡? 另外,这个更复杂,是否可以定义我们自己的哈希方法? 跟进问题[威利回应之后]: 既然可以做到balance hdr(Authorization) ,那么只能在login字段(parsing后)才能做到这一点吗? 另外,什么是确切的algorithm? 我相信它的forms是hash(Authorization) % number_of_backend_server ,但是,什么是散列函数,更重要的是,它是可调整的? (或者我可以添加一个偏移量)。 我问,因为这个应用程序实际上是一个XMPP组件连接打开,我需要负载平衡XMPP组件与相同的algorithm。 XMPP节中的jid由HTTP Header Authorization确定。

Mac OS X是否会节制套接字创build的速率?

这可能看起来与编程有关,但这是一个操作系统的问题。 我正在编写一个小型的高性能守护进程,每秒需要上千个连接。 它在Linux上(尤其是EC2上的Ubuntu 9.10)运行良好。 在Mac OS X上,如果我在基准testing中发现了几千个连接(大约为16350),只需打开一个连接,是否closures连接,那么基准testing程序会挂起几秒钟,等待套接字变为可用之后继续(或在此过程中超时)。 我同时使用Apache Bench和Siege(以确保它不是基准应用程序)。 那么为什么/如何Mac OS X限制插槽可以使用的速率,我可以阻止它做到这一点? 还是有其他事情呢? 我知道有一个文件描述符的限制,但我没有打这个。 接受一个套接字没有任何错误,它只是在第一个(大约)16000之后挂起一段时间,等待 – 我假设 – 操作系统释放一个套接字。 这不应该发生,因为之前所有的套接字都是在这个时候closures的。 他们应该按照他们closures的速度来使用,而在Ubuntu上使用,但是在Mac OS X上似乎有一些多(5-10?)秒的延迟。 我试图用ulimit每一个方式调整。 纳达。