7.3.3 程序细化

服务器端采用高性能、异步事件驱动的NIO框架Netty来实现,部分代码如下:

/***RobotsServer实现

***/

import java.net.InetSocketAddress;

import java.util.concurrent.Executors;

import org.jboss.netty.bootstrap.ServerBootstrap;

import org.jboss.netty.channel.ChannelFactory;

import org.jboss.netty.channel.ChannelPipeline;

import org.jboss.netty.channel.ChannelPipelineFactory;

import org.jboss.netty.channel.Channels;

import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;

public class RobotsServer {

public static void main(String[] args){

ChannelFactory factory = new NioServerSocketChannelFactory(Executors.

newCachedThreadPool(),Executors.newCachedThreadPool());

ServerBootstrap bootstrap = new ServerBootstrap(factory);

bootstrap.setPipelineFactory(new ChannelPipelineFactory() {

public ChannelPipeline getPipeline() throws Exception {

// 机器人进行语义分析,然后返回给客户

return Channels.pipeline(new RobotsServerHandler());

}

});

bootstrap.setOption("child.tcpNoDelay",true);

bootstrap.setOption("child.keepAlive",true);

bootstrap.bind(new InetSocketAddress(8080));

}

}

/***RobotsServerHandler实现

***/

import org.jboss.netty.channel.Channel;

import org.jboss.netty.channel.ChannelHandlerContext;

import org.jboss.netty.channel.ExceptionEvent;

import org.jboss.netty.channel.MessageEvent;

import org.jboss.netty.channel.SimpleChannelHandler;

public class RobotsServerHandler extends SimpleChannelHandler {

@Override

public void messageReceived(ChannelHandlerContext ctx,MessageEvent e) throws

Exception {

Channel channel = e.getChannel();

Object retMessage = messageHandler(e.getMessage());

channel.write(retMessage);

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx,MessageEvent e) throws

Exception {

e.getCause().printStackTrace();

e.getChannel().close();

}

private Object messageHandler(Object message){

// 可以进行一些自然语义分析,然后加上搜索,快速告诉客户你的答案

// 在这里我们只是简单返回,相当于

ECHO的作用

return message;

}"+e.detail.value.q)

console.log(e.detail)

this.setData({

text: initData + '\n' + extraLine.join('\n'),

tt: ''

})

},

wx.connectSocket({

url: 'ws:// www.apayado.com/RobotsServer',

data:{

},

header:{

'content-type': 'application/json'

},

method:"GET"

}),

wx.onSocketOpen(function(res) {

socketOpen = true

}),

打开websocket如下:

function sendSocketMessage(msg) {

if (socketOpen) {

wx.sendSocketMessage({

data:msg

})

} else {

console.log("还没有连接,不能发送:

"+msg)

}

},

发送msg信息给服务器:

wx.onSocketMessage(function(res) {

console.log('收到服务器内容:

' + res.data)

extraLine.push("高冷:

" + res.data)

this.setData({

text: initData + '\n' + extraLine.join('\n'),

tt: ''

})

})

在收到内容后,push到数组中保存extraLine数组在index.js头部定义:

var extraLine = [];

var socketOpen = false;

Page({

data: {

text: initData,

tt: ''

},

这个例子展示了如何使用WebSocket进行客户端和服务器间的通信,小程序在有了WebSocket之后,意味着可以自己实现TCP/UDP短连接、长连接,完成聊天、IM、股票、交易等实时交互的通信应用,甚至可以用于物联网等领域,非常灵活强大,发挥空间巨大。

>>>>好书分享中...关注微信cdf287或cdf289看书

azw3 netty权威指南_小程序,巧应用(pdf+epub+mobi+txt+azw3)相关推荐

  1. mobi 第五项修炼_第五项修炼(pdf+epub+mobi+txt+azw3)

    第5章 心灵的转变 (7)皮格马利翁效应在无数场合都有验证.9有一个在学校的例子:一位老师对一个学生的看法,影响了那个学生的表现.珍很害羞,在新学校的头一个学期,成绩特别不好(因为父母总吵架).于是, ...

  2. php设计模式epub,大话设计模式(pdf+epub+mobi+txt+azw3)

    第2章 商场促销--策略模式 小菜,给你出个作业,做一个商场收银软件,营业员根据客户所购买商品的单价和数量,向客户收费." "就这个?没问题呀."小菜说,"用两 ...

  3. 直击招聘程序员面试笔试C语言深度解析,直击招聘 程序员面试笔试C++语言深度解析(直击招聘) pdf epub mobi txt 下载...

    直击招聘 程序员面试笔试C++语言深度解析(直击招聘) pdf epub mobi txt 下载 图书介绍 ☆☆☆☆☆ 李春葆,李筱驰 著 下载链接在页面底部 发表于2021-05-18 类似图书 点 ...

  4. 《Netty权威指南》笔记 —— 第二十、二十一、二十二, 二十三章

    <Netty权威指南>笔记--Netty高级特性 第20章 Netty架构剖析 Reactor通信调度层 职责链 ChannelPipeline 业务逻辑编排层 关键架构质量属性 高性能 ...

  5. netty权威指南第一章

    本章内容如下: 5种网络I/O模型的介绍 I/O多路复用的介绍 1.I/O基础入门 在Java1.4之前,Java对I/O的支持不完善,开发人员在开发高性能I/O的程序时,会面临以下问题: 没有数据缓 ...

  6. Netty权威指南(四)TCP粘包/拆包问题

    TCP粘包/拆包问题解决之道 上一章 一.介绍 1.1 TCP粘包/拆包问题说明 1.2 TCP粘包/拆包发生的原因 1.3 粘包问题的解决策略 二.未考虑TCP粘包导致的功能异常案例 2.1 Tim ...

  7. 《Netty权威指南》

    <Netty权威指南> 基本信息 作者: 李林锋 出版社:电子工业出版社 ISBN:9787121233432 上架时间:2014-5-29 出版日期:2014 年6月 开本:16开 页码 ...

  8. netty权威指南笔记-以回车换行结尾的消息如何处理半包问题

    概述 TCP底层会发生粘包和拆包,这个是TCP的一个特性.为了减少网络数据传输的次数,TCP总是希望让网络数据到达一定量级的时候才将数据发送出去,而不是缓存区一有数据就马上发送数据. TCP底层会根据 ...

  9. [201504][Netty 权威指南][第2版][李林锋][著]

    [201504][Netty 权威指南][第2版][李林锋][著] https://github.com/wuyinxian124/nettybook2 基础篇 走进 Java NIO 第 1 章 J ...

  10. 《Netty权威指南 第2版》学习笔记(1)---服务端与客户端开发入门

    前言 Netty权威指南中以时间服务器为入门案例,演示了如何通过Netty完成了服务端与客户端之间的交互过程. 在开始使用Netty开发之前,先回顾一下使用NIO进行服务端开发的步骤. 创建Serve ...

最新文章

  1. 请问,关闭子窗口提示错误,大家遇到这样的问题吗?
  2. 20145209刘一阳《JAVA程序设计》第七周课堂测试
  3. Altium_Designer-PCB的覆铜步骤
  4. 十六、数据变换和数据离散化
  5. php 修改css 不生效,HTML外部引用CSS文件不生效原因分析及解决办法
  6. 精通SpringBoot---整合RabbitMQ消息队列
  7. 【博弈】Codeforces Round #573 (Div. 1) Tokitsukaze, CSL and Stone Game
  8. 安全开发Java:日志注入,并没那么简单
  9. php可逆加密函数,简洁的PHP可逆加密函数
  10. OpenShift 4 之 GitOps(5)用ArgoCD配置其他OpenShift资源
  11. dw二级联动下拉菜单插件 宋君墨_Excel下拉菜单不会做?15秒教会你制作一二三级联动下拉菜单,从此做表不求人!...
  12. 20200209:匹配子序列的单词数(leetcode792)
  13. 哐!英特尔的无人机砸中你头顶
  14. 语音信号处理基础(一)
  15. 使用PrinterJob进行分页打印
  16. Java数据库编程基本配置
  17. 工具DebugView、PCHunter、Procexp、Procmon
  18. Android App 免杀教程
  19. Linux 系统字体安装
  20. element-ui table表格。数组对应的一组数据占有两行怎么处理?

热门文章

  1. nodejs EADDRINUSE API拒绝访问
  2. 软件设计师教程---第一章计算机系统知识
  3. 单片机原理及应用 张鑫_单片机原理及应用
  4. 数学建模之排队论模型及代码
  5. iOS 开发技巧(一)
  6. 代码敲累了就来看看《创业计划书结构》
  7. 手动修改美化7zip图标 - 附替换文件
  8. 《通用规范汉字表》2013版
  9. raw socket的例子
  10. php递归函数理解,详解php递归函数