无论大家做web后端还是app后端,还是SOA服务化,长连接都是一个不错的选择,一方面节省了每次都建立连接的资源消耗,另一方面,可以让消息及时的响应,提升了体验。

这里介绍一种通过Nginx module实现长连接的办法,这种方式是http协议上的长连接,严格上讲http协议本身就是请求应答式的,并没有严格意义的长连接,所谓的长连接是指当没有相应的时候,可以一直hold,一直到有相应为止,然后立刻再重新建立一次连接。

下面来讲一下如何来实现的。

1、首先下载NGiNX_HTTP_Push_Module和Nginx,就这两个tar文件;

2、将这两个tar文件拷贝到linux系统上,在nginx目录下执行:

./configure --add-module=path/to/nginx_http_push_module ...

make

make install

3、中间有可能会出现找不到pcre模块等,如果你是Centos系统,使用yum -y install pcre-devel openssl openssl-devel来安装

安装后,继续执行nginx的安装

4、等nginx都安装完毕后,配置长连接:

在/use/local/nginx/conf的nginx.conf文件

添加:

location /publish {

set $push_channel_id $arg_id;

push_publisher;

push_store_messages on;

push_message_timeout 2h;

push_max_message_buffer_length 10;

}

location /activity {

push_subscriber;

set $push_channel_id $arg_id;

push_subscriber_concurrency broadcast;

default_type text/plain;

}

5、重启ngnix,访问http://你的IP:端口/activity?id=你的Channel ,如果浏览器一直等待,

然后,你写一段代码去发布一条消息,如果浏览器能接受到,说明安装成功!

public void testNginx(){

String http = "http://172.16.4.108/publish?id=my";

PostMethod postMethod = new PostMethod(http);

RequestEntity requestEntity = new StringRequestEntity("444");

postMethod.setRequestEntity(requestEntity);

try{

int status =this.client.executeMethod(postMethod);

if (status == HttpStatus.SC_OK) {

String text = postMethod.getResponseBodyAsString();

System.out.println(text);

}

}catch (Exception e){

e.printStackTrace();

}

}

6、以上都安装完毕后,就开始我们自己的逻辑了

下面是监听端,这里做了一个简单的实现,我们需要在监听端始终记录一个lastModified,这个时间代表了他最后接受到的新消息的时间

private static String etag = "";

private static String lastModified = "";

public static void main(String[] args){

while (true) {

HttpClient httpClient = new HttpClient();

String http = "http://172.16.4.108/activity?id=my";

GetMethod getMethod = new GetMethod(http);

getMethod.setRequestHeader("Connection","keep-alive");

getMethod.setRequestHeader("If-None-Match", etag);

getMethod.setRequestHeader("If-Modified-Since", lastModified);

try {

int status = httpClient.executeMethod(getMethod);

if(getMethod.getResponseHeader("Etag") != null) {

etag = getMethod.getResponseHeader("Etag").getValue();

}

if(getMethod.getResponseHeader("Last-Modified") != null) {

lastModified = getMethod.getResponseHeader("Last-Modified").getValue();

}

System.out.println("etag=" + etag + ";lastmodif=" + lastModified + ";status=" + status);

if (status == HttpStatus.SC_OK) {

String text = getMethod.getResponseBodyAsString();

System.out.println(text);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

下面就是发送消息端:和我们测试时候使用的代码一样

public void testNginx(){

String http = "http://172.16.4.108/publish?id=my";

PostMethod postMethod = new PostMethod(http);

RequestEntity requestEntity = new StringRequestEntity("444");

postMethod.setRequestEntity(requestEntity);

try{

int status =this.client.executeMethod(postMethod);

if (status == HttpStatus.SC_OK) {

String text = postMethod.getResponseBodyAsString();

System.out.println(text);

}

}catch (Exception e){

e.printStackTrace();

}

} 到这里,我们的方案就完成了。

nginx linux 长连接,Nginx实现长连接应用相关推荐

  1. linux彻底卸载nginx,linux彻底删除nginx

    卸载 删除 nginx 1.删除nginx,–purge包括配置文件 sudo apt-get --purge remove nginx 1 2.自动移除全部不使用的软件包 sudo apt-get ...

  2. nginx做grpc负载均衡时长连接或者短连接

    nginx设置响应连接是长连接或者短连接 https://blog.csdn.net/qq_21127151/article/details/106880632 nginx反向代理时保持长连接 htt ...

  3. nginx到tomcat有大量CLOSE_WAIT状态连接

    nginx到tomcat有大量CLOSE_WAIT状态连接 原因总结: 资源未及时释放 数据库连接未及时释放,数据库连接池满后新的请求阻塞:https://blog.csdn.net/yu616568 ...

  4. mysql killed进程不结束_php和mysql连接方式(短 长 池)

    一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...

  5. 事务连接中断_HTTP长连接和短连接

    短连接 客户端和服务器每进行一次HTTP事务操作,就建立一次连接,任务结束就中断连接.http1.0协议默认使用短连接 长连接 客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访 ...

  6. HTTP的长连接(持久连接)和短连接

    HTTP的长连接和短连接     本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规 ...

  7. TCP长连接和HTTP长连接

    一.TCP 长连接 (Keep Alive) TCP 长连接是一种保持 TCP 连接的机制.当一个 TCP 连接建立之后,启用 TCP Keep Alive 的一端便会启动一个计时器,当这个计时器到达 ...

  8. 什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?

    文章目录 什么是长连接和短连接? 什么时候使用长连接.短链接? 定义 适用场景 什么是长连接和短连接? 在HTTP/1.0中默认使用短连接.也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连 ...

  9. 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    作者:伯乐在线专栏作者 - 左潇龙 http://web.jobbole.com/85541/ 如有好文章投稿,请点击 → 这里了解详情 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此 ...

  10. MySQL连接方式:长连接或者短连接

    MySQL 既支持短连接,也支持长连接.短连接就是操作完毕以后,马上close 掉.长连接可以保持打开,减少服务端创建和释放连接的消耗,后面的程序访问的时候还可以使用这个连接.一般我们会在连接池中使用 ...

最新文章

  1. 特征选择-处理缺失值-处理不平衡的数据-处理异常值-分档-编码-特征缩放
  2. 机器手六维坐标怎么定义_从基础到实操,一本书读懂ABB工业机器人
  3. mysql的锁表问题
  4. iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行
  5. 计算机非211研究生,这所大学不是211,但“计算机”实力远超985,快来看看
  6. JMetro版本5发布
  7. 进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...
  8. rac一节点时间比另一个节点快_数据库数据那么多为什么可以检索这么快?
  9. Oracle中to_char()函数的用法
  10. 程序员一般都浏览这些网站,不仅仅提升编程水平!
  11. VSCode远程链接Could not establish connection to “hz.matpool.com”
  12. Linux SSH保持连接(解决Broken pipe)
  13. bzoj 3369: [Usaco2004 Feb]Pesky Parentheses 烦人括号(思维题)
  14. 数据处理-倾斜摄影OSGB合并根节点
  15. 3d老显示计算机内存不足,3d 出现:应用程序内存不足,将立即关闭。。。 怎么处理...
  16. 台式计算机主要硬件设备有哪些,电脑基本硬件有哪些
  17. 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
  18. 诗词创作[2] 赠春
  19. pandas读取txt文件第一行列名困扰我许久的'点'
  20. c语言输出字母abcd,有字母ABCD,请用C语言编写程序,输出由该四个字母组成的字符串.要求如下:...

热门文章

  1. 大数据技术周报第 009 期
  2. Django的get和post请求处理
  3. ExtJs2.0学习系列(9)--Ext.TabPanel之第一式
  4. extjs jquery使用场合
  5. 智能机维修暴利大起底:触摸屏成本30维修300元
  6. Security Tutorials系列文章第七章:User-Based Authorization(上)
  7. UpdataPanel学习之 RenderMode
  8. 漫步最优化四十三——拟牛顿法
  9. Redis主从复制及集群
  10. 字符串匹配——BMH算法