自己做网站要多久建e网室内设计网网址

news/2025/9/24 7:42:44/文章来源:
自己做网站要多久,建e网室内设计网网址,做单页网站的软件,wordpress 自定义按钮2019独角兽企业重金招聘Python工程师标准 今天心情很不好#xff01;#xff01;#xff01; 原因保密。 这篇是基于netty与websocket通信demo。 错误想法#xff1a;大量客户请求#xff0c;共用一个worker#xff0c;来实现推送。 正确作法 今天心情很不好 原因保密。 这篇是基于netty与websocket通信demo。 错误想法大量客户请求共用一个worker来实现推送。 正确作法应该是对Channel对应的ChannelGroup进行操作来实现推送。 一个Channel可以划分到多个ChannelGroup中。 PushServerChannelHandler和DynMessage这两个类最重要其实类基本没变。 package org.sl.demo.chatserver;import java.util.List; import java.util.Map;import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelHandler; import org.jboss.netty.channel.group.ChannelGroup; import org.jboss.netty.channel.group.DefaultChannelGroup; import org.jboss.netty.handler.codec.http.DefaultHttpResponse; import org.jboss.netty.handler.codec.http.HttpHeaders; import org.jboss.netty.handler.codec.http.HttpMethod; import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.handler.codec.http.HttpResponseStatus; import org.jboss.netty.handler.codec.http.HttpVersion; import org.jboss.netty.handler.codec.http.websocketx.CloseWebSocketFrame; import org.jboss.netty.handler.codec.http.websocketx.PingWebSocketFrame; import org.jboss.netty.handler.codec.http.websocketx.PongWebSocketFrame; import org.jboss.netty.handler.codec.http.websocketx.TextWebSocketFrame; import org.jboss.netty.handler.codec.http.websocketx.WebSocketFrame; import org.jboss.netty.handler.codec.http.websocketx.WebSocketServerHandshaker; import org.jboss.netty.handler.codec.http.websocketx.WebSocketServerHandshakerFactory;public class PushServerChannelHandler extends SimpleChannelHandler {static boolean debug  true;Overridepublic void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e){if(debug){System.out.println(channelOpen);}DynMessage.addAudience(e.getChannel());}Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception{Channel ch  e.getChannel();Object msg  e.getMessage();if(debug){System.out.println(---------------);System.out.println(message: msg.getClass());}try{if(msg instanceof HttpRequest){processHttpRequest(ch, (HttpRequest)msg);}else if(msg instanceof WebSocketFrame){processWebsocketRequest(ch,(WebSocketFrame)msg);}else{//未处理的请求类型}}catch(Exception ex){ch.close().sync();}super.messageReceived(ctx, e);}Overridepublic void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e){if(debug){System.out.println(channelClosed);}if(e instanceof MessageEvent){MessageEvent me  (MessageEvent) e; }DynMessage.removeAudience(e.getChannel());e.getChannel().close();}Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e){if(debug){System.out.println(channelClosed);}DynMessage.removeAudience(e.getChannel());e.getCause().printStackTrace();e.getChannel().close();try {super.exceptionCaught(ctx, e);} catch (Exception e1) { e1.printStackTrace();}}void processHttpRequest(Channel channel,HttpRequest request){HttpHeaders headers  request.headers();if(debug){ListMap.EntryString,String ls  headers.entries();for(Map.EntryString,String i: ls){System.out.println(header  i.getKey():i.getValue());}} //non-get requestif(!HttpMethod.GET.equals(request.getMethod())){DefaultHttpResponse resp  new DefaultHttpResponse(HttpVersion.HTTP_1_1,HttpResponseStatus.BAD_REQUEST);channel.write(resp); channel.close();return;}WebSocketServerHandshakerFactory wsShakerFactory  new WebSocketServerHandshakerFactory(ws://request.headers().get(HttpHeaders.Names.HOST),null,false );WebSocketServerHandshaker wsShakerHandler  wsShakerFactory.newHandshaker(request);if(nullwsShakerHandler){//无法处理的websocket版本wsShakerFactory.sendUnsupportedWebSocketVersionResponse(channel);}else{//向客户端发送websocket握手,完成握手//客户端收到的状态是101 sitching protocolwsShakerHandler.handshake(channel, request);} }void processWebsocketRequest(Channel channel, WebSocketFrame request) throws Exception{ if(request instanceof CloseWebSocketFrame){DynMessage.removeAudience(channel);channel.close().sync();}else if(request instanceof PingWebSocketFrame){ channel.write(new PongWebSocketFrame(request.getBinaryData()));  }else if(request instanceof TextWebSocketFrame){//这个地方 可以根据需求加上一些业务逻辑TextWebSocketFrame txtReq  (TextWebSocketFrame) request; if(debug){ System.out.println(txtReq:txtReq.getText());}if(disconnect.equalsIgnoreCase(txtReq.getText())){DynMessage.removeAudience(channel);channel.close().sync();return;}//把符合条件的channel添加到DynMessage的channelGroup中DynMessage.addAudience(channel);}else{//WebSocketFrame还有一些}} } package org.sl.demo.chatserver;import java.util.Random;import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.group.ChannelGroup; import org.jboss.netty.channel.group.DefaultChannelGroup; import org.jboss.netty.handler.codec.http.websocketx.TextWebSocketFrame;/** *动态产生消息并向Channel组推送。 */ public class DynMessage implements Runnable{public static ChannelGroup audiences  new DefaultChannelGroup(msg-group);static public void addAudience(Channel ch){ audiences.add(ch);}static public void removeAudience(Channel ch){audiences.remove(ch);}static String[] names  {Tom, Jerry,Terry, Looney,Merrie, William,Joseph, Hanna,Speike, Tyke,Tuffy, Lightning,};static String message  ;public static String getMessage(){StringBuffer sb  new StringBuffer();sb.append(hello,my name is );sb.append(names[new Random().nextInt(names.length)]);sb.append(.); return sb.toString(); // return message;}Overridepublic void run() { System.out.println(DynMessage start);for(;;){String msg  getMessage(); radiate(msg);try{Thread.sleep(1000); }catch(Exception ex){}}}void radiate(String msg){audiences.write(new TextWebSocketFrame(msg));} } html head script srcjquery-1.9.1.js/script script srcmessagepush.js/script script  function doStop(){stopMsgPush(); }function doWsStart(){var  r6  generateMixed(6);$(#txtReq).val(r6);var  params  $(#txtReq).val();doStop();wsMsgPush(127.0.0.1,params,function(data){$(#txtResp).val(data); },function(){$(#txtResp).val(ws close...);} ,function(){$(#txtResp).val(ws error...);} ); } /script /headbodybr/ br/br/ send: input idtxtReq readonlyreadonly typetext value / input typebutton valuestart onclickdoWsStart() input typebutton valuestop onclickdoStop()/  br/recv: input idtxtResp typetext value  size50/ /body /html var _mp_ws  null; var _mp_ajax_it  null;function msgPush(url, params,onmessage,onclose,onerror){wsMsgPush(url,params,onmessage,onclose,onerror);if(!_mp_ws){ajaxMsgPush(url,params,10000,onmessage,onclose,onerror);} }function old_wsMsgPush(url, params,onmessage,onclose,onerror){ var ws  new WebSocket(ws://url); ws.onopen  function(){ws.send(1111)};ws.onmessage  function(evt){ onmessage(evt.data);}; }function wsMsgPush(url, params,onmessage,onclose,onerror){ _mp_ws  new WebSocket(ws://url); if(!_mp_ws){ return; }_mp_ws.onopen  function(){ _mp_ws.send(params); };if(onmessage) _mp_ws.onmessage  function(evt){ onmessage(evt.data); }if(onerror) _mp_ws.onerror  function (evt){ onerror(); }if(onclose) _mp_ws.onclose  function (evt){ onclose(); } }function ajaxMsgPush(url, params,interval,onmessage,onclose,onerror){ function __getmsg(){$.ajax({url: url,data: params,cache: true,type: get,dataType: text, success: function(data, textStatus, jqXHR){ if(onmessage) onmessage(data);},error: function(jqXHR, textStatus, errorThrown){if(onerror) onerror();},complete: function(jqXHR, textStatus){if(onclose) onclose();}});} _mp_ajax_it  setInterval(__getmsg(),interval); }function stopMsgPush(){if(_mp_ws){_mp_ws.send(disconnect);_mp_ws.close();}if(_mp_ajax_it){clearInterval(_mp_ajax_it);} }var chars  [0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z]; function generateMixed(n) {var res  ;for(var i  0; i  n ; i ) {var id  Math.ceil(Math.random()*35);res  chars[id];}return res; } package org.sl.demo.chatserver;import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.Channels; import org.jboss.netty.handler.codec.http.HttpRequestDecoder; import org.jboss.netty.handler.codec.http.HttpResponseEncoder; import org.jboss.netty.handler.timeout.WriteTimeoutHandler; import org.jboss.netty.util.HashedWheelTimer;public class PushServerChannelPiplelineFactory  implements ChannelPipelineFactory{Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline cp  Channels.pipeline();cp.addLast(decoder, new HttpRequestDecoder());cp.addLast(encoder, new HttpResponseEncoder());cp.addLast(writeTimeout, new WriteTimeoutHandler(new HashedWheelTimer(),10));cp.addLast(handler, new PushServerChannelHandler());return cp;}} package org.sl.demo.chatserver;import java.net.InetSocketAddress; import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;public class PushServer implements Runnable{int port  80;public PushServer(int port){this.port  port;}Overridepublic void run() {System.out.println(ChatServer port);ServerBootstrap b  new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));b.setOption(child.tcpNoDelay, true);  b.setOption(child.keepAlive, true);b.setPipelineFactory(new PushServerChannelPiplelineFactory());b.bind(new InetSocketAddress(port));}public static void main(String[] args){Thread t  new Thread(new DynMessage(),DynMessage);t.start();new PushServer(80).run();} } 转载于:https://my.oschina.net/tangcoffee/blog/340246

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特色的企业网站建设域名举例

《组织职业生涯管理》作业答案 一、单选题 1、人力资源供过于求的表现不包括_________ A、职业岗位缺乏 B、社会就业不足 C、政府促进就业政策 D、职业选择余地较大 2、职业的个人功能不包括___________ A、社会稳定的安全阀 B、获取利益的手段 C、个人发挥才能的手段 D、社会贡…

维影企业网站管理系统西苑做网站公司

为什么80%的码农都做不了架构师?>>> 你想知道你的Go程序在做什么吗? go tool trace 可以向你揭示:Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时(如延迟,并行化和竞争异常…

网站 文章排版适合做网站开发的电脑配置

你的投票也许能让 KNIME 中文化快一点点。 i18n 是个很搞笑的单词,它是英文 internationalization 国际化的缩写。18 指的是首字母i和末字母n中间有18个字母。另外还有什么 K8s 也是一样,中间省去了8个字母 ... 真是懒的可以。指北君还想起一个类似的笑话…

做一个15页的网站怎么做2345网址导航中国百年品牌

TOGAF是技术无关的企业级架构框架,WAF则侧重于云的最佳实践和指导方针,本文介绍了两者的异同。原文: Enterprise Architecture with TOGAF and Well-Architected Frameworks (AWS, Azure and Google) 简介 本文旨在解释TOGAF和云架构框架/良好架构框架(W…

做简历哪个网站比较好网站建设免费维护

参考博客: https://blog.csdn.net/DroidPhone/article/details/7165482 (一下内容基本是原博主的博客转载) 文章目录 一、ASOC的由来二、硬件架构三、软件架构四、数据结构五、内核对ASoC的改进 一、ASOC的由来 ASoC–ALSA System on Chip …

做网站的资金来源北京高端网站建设飞沐

这是我的第 54 篇原创文章。String 类型是我们使用最频繁的数据类型,没有之一。那么提高 String 的运行效率,无疑是提升程序性能的最佳手段。我们本文将从 String 的源码入手,一步步带你实现字符串优化的小目标。不但教你如何有效的使用字符串…

开源建站工具头条小程序

VSCode 配置 C++ 环境(Windows) 参考http://t.csdnimg.cn/27G0Z 1. 配置 C++ 编译器 首先需要安装 C++ 编译器。在 Windows 上,可以安装 MinGW 或者 Visual Studio;在 MacOS 上,可以安装 Clang 或者 Xcode;在 Linux 上,可以安装 GCC。 1.2 添加环境变量 将 mingw64…

小蜜蜂网站建设网站快照怎么做

扭线机属于线缆加工设备,线缆加工设备种类非常多。有用于网线绞合的单绞,双绞机等,有关单绞机相关算法介绍,大家可以查看专栏相关文章,有详细介绍,常用链接如下: 线缆行业单绞机控制算法&#…

平面设计案例网站wordpress cms布局

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP3435 大意 一个字符串,对于每个前缀,求复制一份放在末尾可以覆盖整个前缀的前缀,求所有的长度和。 解题思路 这道题如果暴力的话很简单,对于每个前缀每…

上传网站图片不显示自己建的网站如何百度搜索

观察者模式(Observer) 观察者模式(Observer)简介: 定义一个一对多的依赖关系,让多个观察者对象监听某个主题对象,当主题对象的状态发生改变时,主题对象则通知所有的观察者对象&#…

中国建设银行培训网站网站素材图

前置概念 偏差 指模型的预测值与真实值之间的差异,它反映了模型的拟合能力。 方差 指模型在不同的训练集上产生的预测结果的差异,它反映了模型的稳定性。 方差和偏差对预测结果所造成的影响 在机器学习中,我们通常希望模型的偏差和方差都…

宏润建设集团网站手机网页游戏排行榜前十名

文章目录 背景分析 问题来了比较一开始的情况解决方式 背景 之前有分析过一次类似问题,最终结论是在keyby之后,其中有一个key数量特别庞大,导致对应的subtask压力过大,进而使得整个job不再继续运作。在这个问题解决之后&#xff…

福建省高速公路建设管理网站软件开发工具和环境

重点 更多前端知识 诚邀各位前端从事者爱好者加入前端大佬技术交流社区,本社区主要分享技术栈、个人心得、技术交流、问题解惑等前端体系交流 点击下方文字加入 前端大佬技术交流社区 1. 函数的定义和调用 1.1 函数的定义方式 方式1 函数声明方式 function 关键…

包小盒设计网站wordpress手机版主题无效

简单工厂模式描述的是,通过类的继承关系,父类(工厂类)与子类(产品类),调用父类中的方法,实际干活儿的是子类中的方法;封装需求的不确定性,做出通用的编程&…

德阳网站建设优化阳朔到桂林北

2558. 从数量最多的堆取走礼物 原题地址: 力扣每日一题:从数量最多的堆取走礼物 给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作: 选择礼物数量最多的那一堆。 如果不止一堆都符合礼物数量最…

开网站做代销好网站根目录 本地共享

jarsigner, keytool 这2个都是JDK的内置工具,在JDK的bin目录中可以找到, 下面是使用jarsigner给jar文件签名的5个步骤: 1. 使用java的jar工具创建JAR文件; # 将当前文件夹下的所有文件打包到myapp-1.0.jar文件中 后面的*为通配符, 也可以指定需要打包的jar中的文件或者文件夹…

苏州网站开发外包公司免费ppt模板下载公众号

应用场景 上一篇《Spring Cloud Stream消费失败后的处理策略(一):自动重试》介绍了默认就会生效的消息重试功能。对于一些因环境原因、网络抖动等不稳定因素引发的问题可以起到比较好的作用。但是对于诸如代码本身存在的逻辑错误等&#xff…

做网站公司哪家正规古楼角网站建设

2019独角兽企业重金招聘Python工程师标准>>> 由于最近用阿里云日志服务整合log4j,在配置com.aliyun.openservices.log.log4j.LoghubAppender需要设置一些参数,因为项目中有统一的配置文件,所以想要可以直接在log4j.xml中通过${}来…

2025年国家科技奖初评公布(科技发明奖)

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 添加图片注释,不超过 140 字(可选) 添加图片注释,不超过 140 …

做网站的收入上海平台网站建设

SQL Server横向扩展方案-SODA每次在提到SQL Server扩展性问题的时候,似乎很多的SQL Server DBA或者使用微软技术开发的朋友心里总是一整痛:SQL Server只能纵向的扩展(Scaling-Up),无法横向的扩展(Scaling-Out)。每次有人提到Oracle和SQL Serv…