net 通讯开发工具包

  • 作者:cj (赵向彬)发布日期:2016年8月19日 3:24
关键词:学习 技术 面向连接编程 面向模块编程 面向协议编程 编程思想 结构化 面向对象 
java j2ee osgi spring dotnet osgi netty tomcat jetty nodejs jsp php aspx zookeeper docker
摘要:net工具包支持非触接连接基础包,它提供了Graph基类,并提供了WebsiteGraph这种支持web应用的graph。它还提供了通讯能力,实现有: 1.以netty为基础的nio,支持协议有:udt/tcp/http 2.直接以java nio为基础的rio,支持同步和异步,协议有:rio-udt/rio-tcp/rio-http
正文:http://www.cjlns.com
一、Graph基类,它是非接触连接的基础类,实现了流式处理
	涉及的类有:GraphCreate,IPin,ISink,IPlug等
	Graph使用GraphCreate组装一个图,一个图有输入端子和输出端子,这两类端子在Graph外是可见的;还有一种内部端子,在Graph之外不可见。
	流的方向性:graph.in('input')->graph.sinks->graph.out('output')
	每个sink对流的处理接口是:
	public void flow(frame,circuit,plug){
		//TODO
	}
	其中frame是请求侦,circuit代表一个正在执行的当前回路,即当前执行序。plug是将sink插入到pin上时产生的插头,插头具有调度能力,可以主动回馈、跳跃、分支或顺行。插头还有伺服能力,能通过plug.site()获取芯片中的服务和所在graph的相关内容。
二、WebsiteGraph,它实现了全部的web应用协议,放弃了jsp这种拉圾,对于页面代码再也不用编译。对于页面的逻辑实现,开发者可以用java类开发,也可按jss(是js文件)来开发,也可混合使用。
	因此,该组件实现了可以按nodejs语法来写页面。
	在使用时,开发者可需从WebsiteGraph派生你的graph,而后声明为cj服务即可。
	我们看一个websiteGraph的上下文配置,拿平台的website实现作为案例,其下是其根程序集的上下文:
	

{ entryPoint : { activators : [ { name:"服务操作系统启动器", class:"cj.lns.chip.sos.website.ServiceOSActivator", parameters:{} } ] }, assemblyInfo : { assemblyTitle : "serviceos", assemblyResource:"site=/site;http.root=$(site)/framework;http.jss=$(site)/jss/http;ws.jss=$(site)/jss/ws;resource=/resources", assemblyDescription : "服务操作系统", assemblyConfiguration : "", assemblyCompany : "开发者:cj;研发机构:lns平台部", assemblyProduct : "cj.lns.chip.sos.website", assemblyCopyright : "Copyright 2011", assemblyTrademark : "", assemblyCulture : "", guid : "serviceos", assemblyVersion : "1.0.0.0", assemblyFileVersion : "1.0.0.0", readme:"/readme.txt", assemblyIcon:"plugin-noicon-default.icon" }, global:{ default:"zh_CN", desc:"如果系统环境要求各芯片采用的语言本芯片没有,则芯片可采用默认语言" }, serviceContainer : { name : "netContainer", switchFilter:"off", jss:[{ module:"portlets", package:"site.framework.portlets", runtimeHome:"/work/", unzip:"true", searchMode:"link", extName:".jss.js" }], scans : [{ package : "cj.lns.chip.sos.website", extName : ".class|.json|.xml", exoterical:"true" },{ package : "cj.lns.common.sos.website.moduleable", extName : ".class|.json|.xml", exoterical:"true" }] } }

我们看到,serviceContainer.jss一项声明了jss服务模块。 assemblyInfo.assemblyResource指明了web资源位置,其中的ws代表的是http5的websocket的支持 三、nio net 所有nio基于NettyServer和NettyClient类 比如tcp协议,以下是为代码,在使用时根据实际的api来实现:

TcpNettyServer server=new TcpNettyServer(); server.start('localhost','8080'); server.buildNetGraph().netoutput().plug('testsink',new ISink(){ function flow(frame,circuit,plug){ print(frame); } }) TcpNettyClient client=new TcpNettyClient(); client.connect('localhost','8080',new ICallback(){ void build(g){ //构建sink链 } }) //发送请求 client.buildNetGraph().netinput().flow(frame,circuit);

四、rio net 所有rio基于BaseClientRIO,BaseServerRIO 比如tcp协议,以下是为代码,在使用时根据实际的api来实现:

rio net的输入输出端子是电缆线,多通道,其客户端支持连接池,即向同一远程目标可以建立多个连接,默认是1个 TcpCjNetServer server=new TcpCjNetServer(); server.start('localhost','8080'); server.buildNetGraph().netoutput().plug('testsink',new ISink(){ function flow(frame,circuit,plug){ print(frame); } }) TcpCjNetClient client=new TcpCjNetClient(); client.connect('localhost','8080',new ICallback(){ void build(g){ //构建sink链 } }) //发送请求,默认是异步发送,如果要同步返回,可使用: //frame.head(NetConstans.FRAME_HEADKEY_CIRCUIT_SYNC,'true'); //frame.head(NetConstans.FRAME_HEADKEY_CIRCUIT_SYNC_TIMEOUT,'3600');//同步超时时间 //frame.head(NetConstans.FRAME_HEADKEY_CIRCUIT_SYNC_TIMEOUT,'3600');//同步超时时间 //frame.head(NetConstans.FRAME_HEADKEY_CIRCUIT_ASYNC_TIMEOUT,'1200');//同步等待超时后异步通知超时时间,使用此功能需要在回路中设置回馈点来接收 client.buildNetGraph().netinput().flow(frame,circuit);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值