params);
str = str + retr.toString();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 请求执行器
*/
public Integer doGet(String str) {
// 设定每次进入的请求都将全局变量ssa+1(问题所在)
return ++ssa;
}
public static void main(String[] args) throws Exception{
// 启动初始化
init();
// 打印请求路径
for (Map.Entry<String, char *argv[] )
{
while( FCGI_Accept() >= 0 )
{
FCGI_printf( “Status: 200 OK\r\n” );
FCGI_printf( “Content-Type: text/html\r\n\r\n” );
FCGI_printf( "Hello, method);
}
/**
* 请求分发
* @param url 请求路径
* @param params 请求参数
*/
public static Object service(String url, World至浏览器。
采用如下命令进行编译、链接
g++ main.cpp -o helloworld -lfcgi
输出文件可以随便命名,本文命名为helloworld。
3.5 修改nginx.conf文件
在http->server中添加如下location
location = /demo.cgi
{
fastcgi_pass 127.0.0.1:8081;
fastcgi_index index.cgi;
include fastcgi.conf;
}
上述location的意思是所有到达/demo.cgi的请求都转移至运行在127.0.0.1:8081地址的程序中。
修改完毕后,重新加载配置文件,或者重启nginx
3.6 运行fastcgi进程https://blog.csdn.net/w4979/article/details/84718887
https://blog.csdn.net/w4979/article/details/84718887
spawn-fcgi -a 127.0.0.1 -p 8081 -f path-to-helloworld/helloworld
3.7 浏览器中输入 本机ip:8080/demo,即可浏览器中显示“Hello, World至浏览器。
采用如下命令进行编译、链接
g++ main.cpp -o helloworld -lfcgi
输出文件可以随便命名,本文命名为helloworld。
3.5 修改nginx.conf文件
在http->server中添加如下location
location = /demo.cgi
{
fastcgi_pass 127.0.0.1:8081;
fastcgi_index index.cgi;
include fastcgi.conf;
}
上述location的意思是所有到达/demo.cgi的请求都转移至运行在127.0.0.1:8081地址的程序中。
修改完毕后,重新加载配置文件,或者重启nginx
https://blog.csdn.net/w4979/article/details/84718225
3.6 运行fastcgi进程
spawn-fcgi -a 127.0.0.1 -p 8081 -f path-to-helloworld/helloworld
3.7 浏览器中输入 本机ip:8080/demo,即可浏览器中显示“Hello, Method> handleMapping = new HashMap<String, params);
str = str + retr.toString();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
https://blog.csdn.net/w4979/article/details/84718887
/**
* 请求执行器
*/
public Integer doGet(String str) {
// 设定每次进入的请求都将全局变量ssa+1(问题所在)
return ++ssa;
}
public static void main(String[] args) throws Exception{
// 启动初始化
init();
// 打印请求路径
for (Map.Entry<String, String params) {
Object str = "线程" + Thread.currentThread().getName() + ",输出参数:" + null;
try {
// 解析请求路径
String[] urlArr = url.split("/");
// 通过动态代理执行请求过来的方法(执行前会创建一个副本)
Object retr = handleMapping.get(urlArr[1]).invoke(ioc.get(urlArr[0]).getClass().newInstance(), World”
ps:
1,通过ifconfig得到本机ip
2,输入localhost/demo会提示无法访问此网站,因为cgi程序不能使用环回地址,需要使用的是本机ip
3,运行在8081端口的程序可以随便命名,不必与浏览器输入、nginx.confg中配置保持一致
4,浏览器输入必须与nginx.config中配置的http->server中内容保持一致,要不然无法转发的相应后台程序,此时提示无法访问此网站
package com.seesun2012.spring.test;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
- @title: SpringICO测试类
- @version v1.0.0
- @author csdn:seesun2012
- @date 2018年12月02日 下午15:51:44 周日
*/
public class SpringICO {
// 当这里的全局变量为静态时,并发改是会出问题的
private Integer ssa = 0;
// 设定ICO容器,将实例化的对象缓存进IOC中
private static Map<String, params);
str = str + retr.toString();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 请求执行器
*/
public Integer doGet(String str) {
// 设定每次进入的请求都将全局变量ssa+1(问题所在)
return ++ssa;
}
public static void main(String[] args) throws Exception{
// 启动初始化
init();
// 打印请求路径
for (Map.Entry<String, World\n" );
}
return 0;
}
该段代码的意思是当接收到浏览器请求时,回复Hello, String.class);
// 将对象方法名称与方法进行关系映射
handleMapping.put(clazz.getSimpleName() + “/doGet”, Method>();
// 定义维持5个数量的线程池
private static final ExecutorService service = Executors.newFixedThreadPool(5);
/**
* IOC初始化(例如servlet初始化)
*/
public static void init() throws Exception{
// 获取当前类,也可以做成扫描 @Controller注解 方式获取(注解+反射)
Class clazz = new SpringICO().getClass();
// 将路径为 SpringICO/doGet 对象以单例的方式注入到IOC容器
ioc.put(clazz.getSimpleName(), Object>();
// 设定请求映射器
private static Map<String, char *argv[] )
{
while( FCGI_Accept() >= 0 )
{
FCGI_printf( “Status: 200 OK\r\n” );
FCGI_printf( “Content-Type: text/html\r\n\r\n” );
FCGI_printf( "Hello, char *argv[] )
{
while( FCGI_Accept() >= 0 )
{
FCGI_printf( “Status: 200 OK\r\n” );
FCGI_printf( “Content-Type: text/html\r\n\r\n” );
FCGI_printf( "Hello, Method> entry: handleMapping.entrySet()) {
System.out.println(“init() INFO URL:--------------” + entry.getKey() + “--------------”);
}
// 设定多线程同时并发访问
for(int i = 0 ; i < 10 ; i++){
// 提交线程到线程池
service.submit(new Runnable() {
@Override
public void run() {
System.out.println(service(“springICO/doGet”, Object>();
// 设定请求映射器
private static Map<String, Method> handleMapping = new HashMap<String, World”
ps:
1,通过ifconfig得到本机ip
2,输入localhost/demo会提示无法访问此网站,因为cgi程序不能使用环回地址,需要使用的是本机ip
3,运行在8081端口的程序可以随便命名,不必与浏览器输入、nginx.confg中配置保持一致
4,浏览器输入必须与nginx.config中配置的http->server中内容保持一致,要不然无法转发的相应后台程序,此时提示无法访问此网站
package com.seesun2012.spring.test;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
- @title: SpringICO测试类
- @version v1.0.0
- @author csdn:seesun2012
- @date 2018年12月02日 下午15:51:44 周日
*/
public class SpringICO {
// 当这里的全局变量为静态时,并发改是会出问题的
private Integer ssa = 0;
// 设定ICO容器,将实例化的对象缓存进IOC中
private static Map<String, Object>();
// 设定请求映射器
private static Map<String, String params) {
Object str = "线程" + Thread.currentThread().getName() + ",输出参数:" + null;
try {
// 解析请求路径
String[] urlArr = url.split("/");
// 通过动态代理执行请求过来的方法(执行前会创建一个副本)
Object retr = handleMapping.get(urlArr[1]).invoke(ioc.get(urlArr[0]).getClass().newInstance(), Object> ioc = new HashMap<String, ""));