Cache实现HTTP服务

之前用C#实现的HTTP服务,Cache提供的有TCP功能,也能实现HTTP服务。基于此基础可以继续开发实现HTML嵌入M脚本达到动态脚本效果,类似CSP。也能处理提交的Soap协议XML,按XML调用M方法返回,实现不依赖csp配置模式的webservice。熬了一夜实现的初版HTTP服务。

/// d StartHttpServer^LIS.WS.Socket
/// 开启HTTP服务
StartHttpServer
	//换行符
	s rowsp=$c(13,10)
	s Port=$g(Port)
	s Port=50008
	zw Port
	s IP=$p($zu(54,13,$zu(54,0)),",")
	s Device="|TCP|1"
	s msg="发布在:"_IP_":"_Port_"上,用浏览器访问该地址"
	//启动tcp
	o Device:(:Port:"MA"):200
	//测试是否成功
	i $TEST=0 
	{
     
      THROW ##class(%Exception.SystemException).%New("异常","D",,"作为服务端在端口:"_Port_"启动TCP连接失败,请检查端口")
      QUIT 
    }
    else 
    {
      
      zw msg 
    }
    //启动主侦听
    d ListenMian
    c Device
    q ""
    
///主侦听函数,有线程处理客户端请求
ListenMian  
     u Device READ x   
     u 0
     u Device 
     //用子线程处理客户端请求
     j DealClient:(:17::) 
     //GOTO做成循环 
     GOTO ListenMian
   
///处理客户端请求  
DealClient 
    s Device=##class(%SYSTEM.INetInfo).TCPName()
    //客户端输入的数据
    s input=$PRINCIPAL
    s output=$IO
    s record=""
    u Device:(::"M")  
    //读取数据
    s dataLen=0
    s isb=0
    s timeout=10
    f  r *x:timeout q:$c(x)=""  d
    .s record=record_$c(x)
    .s dataLen=dataLen+1
    .i $c(x)=$c(10),$e(record,dataLen-3,dataLen)=$c(13,10,13,10) s timeout=0 break
    s rows=$l(record,rowsp)
	s QType=""
	s QPath=""
	s HttpVertion=""
	//解析请求头
	f ri=1:1:rows d
	.s oneRow=$p(record,rowsp,ri)
	.i ri=1 d
	..s QType=$p(oneRow," ",1)
	..s QPath=$p(oneRow," ",2)
	..s HttpVertion=$p(oneRow," ",2)
	//返回默认页面
	i QType="GET",((QPath="/")||(QPath="")) d
	.s retHtml=$$GetDemoHtml()
	.s retHead=$$GetRetHtmlHead($l(retHtml))
	.w retHead,*-3
	.w retHtml,*-3
    q

        
        
 /// 得到返回信息头
GetRetHtmlHead(ContentLength)
	s head="HTTP/1.0 200 OK"_$c(13,10)
	s head=head_"Content-Length:"_ContentLength_$c(13,10)
	s head=head_"Server:zlzhttpd/0.0.1"_$c(13,10)
	s head=head_"Content-Type:text/html"_$c(13,10)
	s head=head_""_$c(13,10)
	q head

/// 得到默认的页面 
GetDemoHtml()
	s retHtml=""
	s retHtml=retHtml_"Index"
	s retHtml=retHtml_""
	s retHtml=retHtml_"

Welcome to zlz's webserver.this is make by cache tcp

"
s retHtml=retHtml_"" s retHtml=retHtml_"" q retHtml

Cache实现HTTP服务_第1张图片
通过此实现可以:
1.熟悉Cache的TCPServer模式,帮助连仪器基础
2.熟悉HTTP交互
3.网站服务器没那么神秘

后面实现webservice调用M和简单的嵌入M脚本效果来论述webservice机制和(asp、jsp、csp)动态脚本简单示例

你可能感兴趣的:(Caché,http,网络,网络协议)