备注:

tio-core 版本 3.2.2

jdk 1.8.161

maven 环境

下载地址:https://gitee.com/tywo45/tio-websocket-showcase

下载后导入eclipse,如下

前提是配置好maven环境

然后执行 maven clean  清理项目

然后执行maven install 打包项目

如果都是success ,那么说明项目运行环境完全OK

  1. 启动测试项目

找到ShowcaseWebsocketStarter类,该类是该工程的启动类

里面有main方法,右键-run as -java application

启动过程如下:


2018-11-22 12:43:16,522 INFO  org.tio.server.TioServer[158]:
|----------------------------------------------------------------------------------------|
| Tio gitee address | https://gitee.com/tywo45/t-io                                      |
| Tio site address  | https://t-io.org/                                                  |
| Tio version       | 3.2.2.v20181122-RELEASE                                            |
| ---------------------------------------------------------------------------------------|
| GroupContext name | Tio Http Server                                                    |
| Started at        | 2018-11-22 12:43:16                                                |
| Listen on         | 0.0.0.0:80                                                         |
| Main Class        | org.tio.showcase.websocket.server.ShowcaseWebsocketStarter         |
| Jvm start time    | 659 ms                                                             |
| Tio start time    | 33 ms                                                              |
| Pid               | 12800                                                              |
|----------------------------------------------------------------------------------------|2018-11-22 12:43:16,529 INFO  org.tio.server.TioServer[158]:
|----------------------------------------------------------------------------------------|
| Tio gitee address | https://gitee.com/tywo45/t-io                                      |
| Tio site address  | https://t-io.org/                                                  |
| Tio version       | 3.2.2.v20181122-RELEASE                                            |
| ---------------------------------------------------------------------------------------|
| GroupContext name | showcase                                                           |
| Started at        | 2018-11-22 12:43:16                                                |
| Listen on         | 0.0.0.0:9326                                                       |
| Main Class        | org.tio.showcase.websocket.server.ShowcaseWebsocketStarter         |
| Jvm start time    | 666 ms                                                             |
| Tio start time    | 1 ms                                                               |
| Pid               | 12800                                                              |
|----------------------------------------------------------------------------------------|

服务器端口为:80

在浏览器访问:http://localhost

显示如下界面:

出现这个界面,说明已经启动成功啦!

那接下来就爽一把,聊天试试吧!

是不是很爽,运行成功啦!

展示tio-websocket的用法,t-io官方提供的唯一tio-websocket示范教程,包括wss和监控等高级特性

这是官方对showcase的描述

那么我们就进行下一步探索吧!

不能不说谭总是个良心开源架构师!

查看分析源码

分析源码怎么入手呢,还是从启动入口开始

ShowcaseWebsocketStarter 工程的启动类:

showcase 涉及到两块:tio-http 和tio-websocket

话分两路:

先说tio-http的运行过程:

 public static void main(String[] args) throws Exception {//启动http server,这个步骤不是必须的,但是为了用页面演示websocket,所以先启动httpP.use("app.properties");if (P.getInt("start.http", 1) == 1) {HttpServerInit.init();}//启动websocket serverstart();}

这段代码指定了要用到的配置文件:app.properties

配置文件中有是否启动http服务:start.http ,如果为1,那么就是启动HTTp服务,

首先通过HttpServerInit类,即http 初始化配置类,调用init 初始化方法

该方法中初始化配置完成后,即启动了http服务:

关键代码如下:

 public static void init() throws Exception {//      long start = SystemTimer.currTime;int port = P.getInt("http.port");//启动端口String pageRoot = P.get("http.page");//html/css/js等的根目录,支持classpath:,也支持绝对路径httpConfig = new HttpConfig(port, null, null, null);httpConfig.setPageRoot(pageRoot);httpConfig.setMaxLiveTimeOfStaticRes(P.getInt("http.maxLiveTimeOfStaticRes"));httpConfig.setPage404(P.get("http.404"));httpConfig.setPage500(P.get("http.500"));httpConfig.setUseSession(false);httpConfig.setCheckHost(false);requestHandler = new DefaultHttpRequestHandler(httpConfig, HttpServerShowcaseStarter.class);//第二个参数也可以是数组httpServerStarter = new HttpServerStarter(httpConfig, requestHandler);serverGroupContext = httpServerStarter.getServerGroupContext();httpServerStarter.start(); //启动http服务器}

该初始化配置代码主要是从配置文件中获取http的初始化配置信息,比如端口,静态资源路径,404,500界面地址等信息

最关键的是,可以配置自己的Handler类,这个类是需要实现HttpRequestHandler接口。

该实例中使用的是tio-server包中默认的DefaultHttpRequestHandler类,默认的处理类,

所有的http请求都会经过该类的handler方法进行处理过滤,相当于springmvc中的过滤器。

通过httpconfig和requestHandler 初始化HttpServerStarter类

HttpServerStarter类是 tio-http包的启动类,该类根据配置信息初始化了tioServer类

httpServerStarter.start();是启动Http服务的地方

其实最终还是启动的TioServer,

http服务器启动后,会发现根据配置文件,端口是80 ,那么直接在浏览器访问:

http://localhost就能访问到http服务的默认欢迎界面index.html

到此,http服务就启动成功了,

问题:

系统默认的欢迎页是index.html ,那么是否可以自己设置呢,答案是可以的,在httpConfig中有一个防范

httpConfig.setWelcomeFile就可以修改默认的欢迎界面了

那么http启动成功了,就能显示界面了,那么发送信息,显示信息是怎么实现的呢,

那就用到了我们的猪脚:websocket

tio-websocket是非常棒的,开始登场了!

还是从开始启动说起:

在启动类中的main方法中,

 public static void main(String[] args) throws Exception {//启动http server,这个步骤不是必须的,但是为了用页面演示websocket,所以先启动httpP.use("app.properties");if (P.getInt("start.http", 1) == 1) {HttpServerInit.init();}//启动websocket serverstart();}

这个最下面的start();就是启动websokect服务的,接着往下缕

这个方法实现了什么呢,看代码:

 public static void start() throws Exception {ShowcaseWebsocketStarter appStarter = new ShowcaseWebsocketStarter(ShowcaseServerConfig.SERVER_PORT, ShowcaseWsMsgHandler.me);appStarter.wsServerStarter.start();}

这个方法很简单,就两行代码

首先初始化了一下自己,new了一个新的对象,

重点是在new新对象的时候,创建了一个叫WsServerStarter的对象,这个 对象才是整个事件的猪脚,

这个对象的start()方法才是真正的启动websocket服务。

那么构造方法中都干了啥:

看代码:

public ShowcaseWebsocketStarter(int port, ShowcaseWsMsgHandler wsMsgHandler) throws Exception {wsServerStarter = new WsServerStarter(port, wsMsgHandler);serverGroupContext = wsServerStarter.getServerGroupContext();serverGroupContext.setName(ShowcaseServerConfig.PROTOCOL_NAME);serverGroupContext.setServerAioListener(ShowcaseServerAioListener.me);//设置ip监控serverGroupContext.setIpStatListener(ShowcaseIpStatListener.me);//设置ip统计时间段serverGroupContext.ipStats.addDurations(ShowcaseServerConfig.IpStatDuration.IPSTAT_DURATIONS);//设置心跳超时时间serverGroupContext.setHeartbeatTimeout(ShowcaseServerConfig.HEARTBEAT_TIMEOUT);if (P.getInt("ws.use.ssl", 1) == 1) {//如果你希望通过wss来访问,就加上下面的代码吧,不过首先你得有SSL证书(证书必须和域名相匹配,否则可能访问不了ssl)String keyStoreFile = "classpath:config/ssl/keystore.jks";String trustStoreFile = "classpath:config/ssl/keystore.jks";String keyStorePwd = "214323428310224";serverGroupContext.useSsl(keyStoreFile, trustStoreFile, keyStorePwd);}}

分析一下:

该构造方法有两个参数:

port:websocket的端口

wsMsgHandler:websocket的处理类

等等,wsMsgHandler是什么鬼

暂且知道这是websocket的处理类

wsServerStarter = new WsServerStarter(port, wsMsgHandler);

该代码的意思是创建了一个新的wsServerStarter对象

下面的代码都是配置gropcontext

配置完这些后,就启动wsServer了

appStarter.wsServerStarter.start();

启动以后是怎么工作的呢:

首先我们知道初始化的时候绑定了端口:9326

也就是说,websocket会监听9326,那怎么实现的web端跟服务端通讯呢,这是关键

接下来看看web端有哪些东西

首先是index.html

<body><div id="app"><iframe src="./im.html" style="width:500px; height:850px;"></iframe><iframe src="./im.html" style="width:500px; height:850px;"></iframe></div></body>

该界面就是一个iframe框架

引入的界面是im.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>IM Now!</title>
<link rel="stylesheet" type="text/css" href="im.css" />
</head>
<body><div id="container"><div class="header"><span style="float: left;">微信聊天界面</span> <span id="mtime"style="float: right;"></span></div><ul class="content"></ul><div class="footer"><div id="user_face_icon"><img src="data:image/t2.jpg" alt=""></div><input id="messageText" type="text" placeholder="说点什么吧..."><span id="btn" onclick="sendMsg()">发送</span></div></div><script src="./tio/tiows.js"></script><script src="./name.js"></script><script src="./imHandler.js"></script><script src="./im.js"></script>
</body>
</html>

这个界面展示 的是一个聊天的界面,展示和发送

关键是引入了四个文件:

<script src="./tio/tiows.js"></script>
    <script src="./name.js"></script>
    <script src="./imHandler.js"></script>
    <script src="./im.js"></script>

分别是干啥用的呢?

tiows.js

TIO-websoket-showcase 学习笔记相关推荐

  1. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  2. 【theano-windows】学习笔记二——theano中的函数和共享参数

    前言 上一篇博客中学到了theano中的变量类型,也就是dscalar.dvector之类的, 然后还有一个theano.function和eval函数, 将我们所定义的操作转换成theano可执行的 ...

  3. 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记

    <疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...

  4. AVFounction学习笔记之--音视频播放.md

    AVFounction学习笔记之–音视频播放 AVFounction是用于处理音视频的框架.它位于Core Audio.Core Video.Core Media.Core Animation框架之上 ...

  5. docsify学习笔记

    docsify学习笔记 1 docsify介绍 自己从事客户端的开发工作,总搭建自己的博客把零散的知识记录起来.对网页开发这块不太懂,总是没事copy别人一个前端模板来用,可是找不到自己满意的那种,简 ...

  6. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  7. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  9. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  10. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

最新文章

  1. php通过http请求发送数组
  2. 深入解析Spring MVC与Web Flow
  3. 浅谈人性 - 讲讲人性丑恶的一面
  4. 12种高效率热门编程语言,你会用几个?
  5. 知云文献翻译登录时不显示二维码,显示二维码后扫描登录不跳转解决方案
  6. RHEL5中YUM命令解决RPM包依赖性
  7. 数据合并之concat、append、merge和join
  8. SpringMVC之@requestBody的作用
  9. 创翼软件linux版本,创翼pc版下载-创翼电脑版下载v5.2.22.5226-软件爱好者
  10. drawio流程图软件_Win10 一般软件个人收集
  11. mysql decimal被四舍五入_MySQL之ROUND函数四舍五入的陷阱
  12. 2 分支语句——《Swift3.0 从入门到出家》
  13. 无pygame写一个python贪吃蛇
  14. 现代处理器设计——超标量处理器基础(5-8)
  15. SQL2000中文版打不上SP4提示用户验证没有通过
  16. 基于视频分析的rPPG心率检测
  17. OBS Studio(obs录屏软件)官方中文版V27.2.4 | 最新obs中文版百度云下载
  18. 先验分布与后验分布,认真看看这篇
  19. gamit错误提示:PCN-code missing for receiver type TRMR12 in rcvant.dat
  20. 技术实验—使用selenium打开百度搜索关键字

热门文章

  1. Chain of Responsibility 模式-----推卸责任模式
  2. 工资少不加班与工资高但996,你选哪个
  3. workflow engine Ruote 安装
  4. linux下网页制作,linux网页制作
  5. github前端插件大全
  6. jacky自问自答-java并发编程
  7. 新世纪福音战士剧场版破
  8. Google Earth Engine(GEE)——join连接在GEE中的应用(同一sentinel-2影像集合)含滑动窗口平滑影像过程
  9. 阿里云ECS服务器购买记录
  10. 计算机配置参数格式错误,关于bios标准设置故障的实例详解