Skip to content

Commit

Permalink
去掉socket.io,增加javax.websocket,开启websocket后重启服务不用再等待ws服务停止了
Browse files Browse the repository at this point in the history
  • Loading branch information
atjiu committed May 29, 2019
1 parent e1bdd49 commit 7fdf605
Show file tree
Hide file tree
Showing 23 changed files with 466 additions and 342 deletions.
Binary file modified docs/images/QQ20190123-103144.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
68 changes: 22 additions & 46 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1310,20 +1310,27 @@ <h3 id="短信验证码登录-注册"><a class="anchor" href="#短信验证码
<div class="sect2">
<h3 id="开启websocket"><a class="anchor" href="#开启websocket"></a>开启WebSocket</h3>
<div class="paragraph">
<p><strong>websocket功能默认是关闭的,为啥默认不开启呢?因为这货用在论坛里有些鸡肋,原因如下</strong></p>
<p>重新更新了一下websocket的实现,换成了javax.websocket包下的类实现,没有了之间的关闭服务还要等会的问题了</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>启动论坛的同时还要启动一个websocket服务</p>
</li>
<li>
<p>在关闭论坛服务的时候,websocket服务还会停留一段时间,说长不长说短也不短,前后大约要1-2分钟的样子</p>
</li>
<li>
<p>论坛没有做无刷新页面获取数据的功能(比如pjax),所以每次访问论坛内的页面时,都会刷新页面,这会导致ws连接断开,然后等待页面加载完成后,它又开始重连</p>
</li>
</ol>
<div class="paragraph">
<p>而且页面上也不用再多引入一个socket.io的js了,纯原生的js实现</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
<div class="paragraph">
<p>注意,因为网站是服务端渲染的,所以每次请求页面都会刷新,websocket也会重连,这就有点蛋疼了</p>
</div>
<div class="paragraph">
<p>不过也不是没办法, 可以给网站加上pjax支持,也可以将这个功能用在纯js渲染的网站上,很显然这两个功能pybbs都还没有</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>目前围绕ws开发的功能有如下</p>
Expand Down Expand Up @@ -1363,19 +1370,6 @@ <h3 id="开启websocket"><a class="anchor" href="#开启websocket"></a>开启Web
</li>
</ul>
</div>
<div class="paragraph">
<p>后续想法:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>给论坛接入pjax,让网页实现无刷新浏览内容,这样ws连接就不会断了</p>
</li>
<li>
<p>给论坛开发一套ws主题,全站就只有一个首页,内容全靠ws服务从服务端推给前端,这个听起来很赞,实现不太好弄,相当于又重新开发一个网站了</p>
</li>
</ul>
</div>
<hr>
<div class="paragraph">
<p>如果你看了上面的说明后,还是想开启,配置如下</p>
Expand All @@ -1384,39 +1378,21 @@ <h3 id="开启websocket"><a class="anchor" href="#开启websocket"></a>开启Web
<p><span class="image"><img src="./images/QQ20190123-103144.png" alt="QQ20190123-103144"></span></p>
</div>
<div class="paragraph">
<p>只有三个配置</p>
<p>只有两个配置</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>开启功能,不多说</p>
</li>
<li>
<p>ws服务的主机名,这个我在开发的时候用的是`http://localhost:8080`访问的论坛,所以这里就配置成了 <code>localhost</code></p>
</li>
<li>
<p>ws服务的端口,论坛的端口是8080,我在开发的时候这里配置成了8081,只要不跟其它服务的端口冲突就可以</p>
<p>ws连接地址,协议是 <code>ws</code> 或者 <code>wss</code>(如果你网站访问用的是https,那这个就应该是wss),其它跟上面配置的网站访问域名一样</p>
</li>
</ol>
</div>
<div class="paragraph">
<p><strong>至于上面主机名能不能配置成其它的,我没试过,不过它既然是一套服务了,应该是可以配置成独立的域名的,而且应该还可以直接抽出成一个单独的服务,这个我没验证,有兴趣的朋友可以试一下</strong></p>
</div>
<div class="paragraph">
<p>然后直接启动系统即可,注意,ws服务在前端只有登录后的用户才有效</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
<strong>另外有一点要说明一下,如果你在开发过程中开启了ws服务,当改了点代码,要重启一下,这中间要等待1-2分钟,不知道为啥ws服务跟论坛服务不是同时停掉的,你要是有解决办法,求告知</strong>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="内置主题"><a class="anchor" href="#内置主题"></a>内置主题</h3>
Expand Down
70 changes: 23 additions & 47 deletions docs/ws-config.html
Original file line number Diff line number Diff line change
Expand Up @@ -508,20 +508,27 @@
<div class="sect2">
<h3 id="开启websocket"><a class="anchor" href="#开启websocket"></a>开启WebSocket</h3>
<div class="paragraph">
<p><strong>websocket功能默认是关闭的,为啥默认不开启呢?因为这货用在论坛里有些鸡肋,原因如下</strong></p>
<p>重新更新了一下websocket的实现,换成了javax.websocket包下的类实现,没有了之间的关闭服务还要等会的问题了</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>启动论坛的同时还要启动一个websocket服务</p>
</li>
<li>
<p>在关闭论坛服务的时候,websocket服务还会停留一段时间,说长不长说短也不短,前后大约要1-2分钟的样子</p>
</li>
<li>
<p>论坛没有做无刷新页面获取数据的功能(比如pjax),所以每次访问论坛内的页面时,都会刷新页面,这会导致ws连接断开,然后等待页面加载完成后,它又开始重连</p>
</li>
</ol>
<div class="paragraph">
<p>而且页面上也不用再多引入一个socket.io的js了,纯原生的js实现</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
<div class="paragraph">
<p>注意,因为网站是服务端渲染的,所以每次请求页面都会刷新,websocket也会重连,这就有点蛋疼了</p>
</div>
<div class="paragraph">
<p>不过也不是没办法, 可以给网站加上pjax支持,也可以将这个功能用在纯js渲染的网站上,很显然这两个功能pybbs都还没有</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>目前围绕ws开发的功能有如下</p>
Expand Down Expand Up @@ -561,19 +568,6 @@ <h3 id="开启websocket"><a class="anchor" href="#开启websocket"></a>开启Web
</li>
</ul>
</div>
<div class="paragraph">
<p>后续想法:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>给论坛接入pjax,让网页实现无刷新浏览内容,这样ws连接就不会断了</p>
</li>
<li>
<p>给论坛开发一套ws主题,全站就只有一个首页,内容全靠ws服务从服务端推给前端,这个听起来很赞,实现不太好弄,相当于又重新开发一个网站了</p>
</li>
</ul>
</div>
<hr>
<div class="paragraph">
<p>如果你看了上面的说明后,还是想开启,配置如下</p>
Expand All @@ -582,44 +576,26 @@ <h3 id="开启websocket"><a class="anchor" href="#开启websocket"></a>开启Web
<p><span class="image"><img src="./images/QQ20190123-103144.png" alt="QQ20190123-103144"></span></p>
</div>
<div class="paragraph">
<p>只有三个配置</p>
<p>只有两个配置</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>开启功能,不多说</p>
</li>
<li>
<p>ws服务的主机名,这个我在开发的时候用的是`http://localhost:8080`访问的论坛,所以这里就配置成了 <code>localhost</code></p>
</li>
<li>
<p>ws服务的端口,论坛的端口是8080,我在开发的时候这里配置成了8081,只要不跟其它服务的端口冲突就可以</p>
<p>ws连接地址,协议是 <code>ws</code> 或者 <code>wss</code>(如果你网站访问用的是https,那这个就应该是wss),其它跟上面配置的网站访问域名一样</p>
</li>
</ol>
</div>
<div class="paragraph">
<p><strong>至于上面主机名能不能配置成其它的,我没试过,不过它既然是一套服务了,应该是可以配置成独立的域名的,而且应该还可以直接抽出成一个单独的服务,这个我没验证,有兴趣的朋友可以试一下</strong></p>
</div>
<div class="paragraph">
<p>然后直接启动系统即可,注意,ws服务在前端只有登录后的用户才有效</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
<strong>另外有一点要说明一下,如果你在开发过程中开启了ws服务,当改了点代码,要重启一下,这中间要等待1-2分钟,不知道为啥ws服务跟论坛服务不是同时停掉的,你要是有解决办法,求告知</strong>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2019-05-07 09:05:22 +08:00
Last updated 2019-05-29 15:25:03 +08:00
</div>
</div>
</body>
Expand Down
18 changes: 9 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>co.yiiu</groupId>
<artifactId>pybbs</artifactId>
<version>5.2.0</version>
<version>5.2.1</version>
<packaging>jar</packaging>

<name>pybbs</name>
Expand All @@ -23,7 +23,7 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis-plus.version>3.0.7</mybatis-plus.version>
<gson.version>2.8.5</gson.version>
<fastjson.version>1.2.57</fastjson.version>
<commonmark.version>0.12.1</commonmark.version>
<guava.version>27.0-jre</guava.version>
<jsoup.version>1.11.3</jsoup.version>
Expand All @@ -32,17 +32,17 @@
<jedis.version>3.0.0</jedis.version>
<elasticsearch.version>6.5.3</elasticsearch.version>
<flyway.version>5.2.3</flyway.version>
<netty-socketio.version>1.7.7</netty-socketio.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot-starter-websocket</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -85,13 +85,13 @@
</dependency>
<!--mybatis-plus end-->

<!--gson start-->
<!--fastjson start-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--gson end-->
<!--fastjson end-->

<!--guava start-->
<dependency>
Expand Down
51 changes: 0 additions & 51 deletions src/main/java/co/yiiu/pybbs/config/websocket/BindDataListener.java

This file was deleted.

30 changes: 30 additions & 0 deletions src/main/java/co/yiiu/pybbs/config/websocket/MessageDecoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package co.yiiu.pybbs.config.websocket;

import co.yiiu.pybbs.util.Message;
import com.alibaba.fastjson.JSON;

import javax.websocket.Decoder;
import javax.websocket.EndpointConfig;

public class MessageDecoder implements Decoder.Text<Message> {
@Override
public Message decode(String s) {
return JSON.parseObject(s, Message.class);
}

@Override
public boolean willDecode(String s) {
// 验证json字符串是否合法,合法才会进入decode()方法进行转换,不合法直接抛异常
return JSON.isValid(s);
}

@Override
public void init(EndpointConfig endpointConfig) {

}

@Override
public void destroy() {

}
}
24 changes: 24 additions & 0 deletions src/main/java/co/yiiu/pybbs/config/websocket/MessageEncoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package co.yiiu.pybbs.config.websocket;

import co.yiiu.pybbs.util.Message;
import com.alibaba.fastjson.JSON;

import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;

public class MessageEncoder implements Encoder.Text<Message> {
@Override
public String encode(Message o) {
return JSON.toJSONString(o);
}

@Override
public void init(EndpointConfig endpointConfig) {

}

@Override
public void destroy() {

}
}
Loading

0 comments on commit 7fdf605

Please sign in to comment.