nginx linux 长连接,Nginx实现长连接应用
无论大家做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实现长连接应用相关推荐
- linux彻底卸载nginx,linux彻底删除nginx
卸载 删除 nginx 1.删除nginx,–purge包括配置文件 sudo apt-get --purge remove nginx 1 2.自动移除全部不使用的软件包 sudo apt-get ...
- nginx做grpc负载均衡时长连接或者短连接
nginx设置响应连接是长连接或者短连接 https://blog.csdn.net/qq_21127151/article/details/106880632 nginx反向代理时保持长连接 htt ...
- nginx到tomcat有大量CLOSE_WAIT状态连接
nginx到tomcat有大量CLOSE_WAIT状态连接 原因总结: 资源未及时释放 数据库连接未及时释放,数据库连接池满后新的请求阻塞:https://blog.csdn.net/yu616568 ...
- mysql killed进程不结束_php和mysql连接方式(短 长 池)
一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...
- 事务连接中断_HTTP长连接和短连接
短连接 客户端和服务器每进行一次HTTP事务操作,就建立一次连接,任务结束就中断连接.http1.0协议默认使用短连接 长连接 客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访 ...
- HTTP的长连接(持久连接)和短连接
HTTP的长连接和短连接 本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规 ...
- TCP长连接和HTTP长连接
一.TCP 长连接 (Keep Alive) TCP 长连接是一种保持 TCP 连接的机制.当一个 TCP 连接建立之后,启用 TCP Keep Alive 的一端便会启动一个计时器,当这个计时器到达 ...
- 什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?
文章目录 什么是长连接和短连接? 什么时候使用长连接.短链接? 定义 适用场景 什么是长连接和短连接? 在HTTP/1.0中默认使用短连接.也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连 ...
- 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
作者:伯乐在线专栏作者 - 左潇龙 http://web.jobbole.com/85541/ 如有好文章投稿,请点击 → 这里了解详情 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此 ...
- MySQL连接方式:长连接或者短连接
MySQL 既支持短连接,也支持长连接.短连接就是操作完毕以后,马上close 掉.长连接可以保持打开,减少服务端创建和释放连接的消耗,后面的程序访问的时候还可以使用这个连接.一般我们会在连接池中使用 ...
最新文章
- 特征选择-处理缺失值-处理不平衡的数据-处理异常值-分档-编码-特征缩放
- 机器手六维坐标怎么定义_从基础到实操,一本书读懂ABB工业机器人
- mysql的锁表问题
- iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行
- 计算机非211研究生,这所大学不是211,但“计算机”实力远超985,快来看看
- JMetro版本5发布
- 进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...
- rac一节点时间比另一个节点快_数据库数据那么多为什么可以检索这么快?
- Oracle中to_char()函数的用法
- 程序员一般都浏览这些网站,不仅仅提升编程水平!
- VSCode远程链接Could not establish connection to “hz.matpool.com”
- Linux SSH保持连接(解决Broken pipe)
- bzoj 3369: [Usaco2004 Feb]Pesky Parentheses 烦人括号(思维题)
- 数据处理-倾斜摄影OSGB合并根节点
- 3d老显示计算机内存不足,3d 出现:应用程序内存不足,将立即关闭。。。 怎么处理...
- 台式计算机主要硬件设备有哪些,电脑基本硬件有哪些
- 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
- 诗词创作[2] 赠春
- pandas读取txt文件第一行列名困扰我许久的'点'
- c语言输出字母abcd,有字母ABCD,请用C语言编写程序,输出由该四个字母组成的字符串.要求如下:...