Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yubinCloud
fairy-wiki
提交
b67b6a28
F
fairy-wiki
项目概览
yubinCloud
/
fairy-wiki
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
fairy-wiki
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b67b6a28
编写于
4月 29, 2021
作者:
yubinCloud
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
10-8 集成 WebSocket
上级
5a367a6c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
137 addition
and
1 deletion
+137
-1
pom.xml
pom.xml
+5
-0
src/main/java/io/github/yubincloud/fairywiki/config/WebSocketConfig.java
...o/github/yubincloud/fairywiki/config/WebSocketConfig.java
+15
-0
src/main/java/io/github/yubincloud/fairywiki/websocket/WebSocketServer.java
...ithub/yubincloud/fairywiki/websocket/WebSocketServer.java
+75
-0
web/src/components/the-footer.vue
web/src/components/the-footer.vue
+42
-1
未找到文件。
pom.xml
浏览文件 @
b67b6a28
...
...
@@ -96,6 +96,11 @@
<version>
3.0.2
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-websocket
</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
...
...
src/main/java/io/github/yubincloud/fairywiki/config/WebSocketConfig.java
0 → 100644
浏览文件 @
b67b6a28
package
io.github.yubincloud.fairywiki.config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.socket.server.standard.ServerEndpointExporter
;
@Configuration
public
class
WebSocketConfig
{
@Bean
public
ServerEndpointExporter
serverEndpointExporter
()
{
return
new
ServerEndpointExporter
();
}
}
src/main/java/io/github/yubincloud/fairywiki/websocket/WebSocketServer.java
0 → 100644
浏览文件 @
b67b6a28
package
io.github.yubincloud.fairywiki.websocket
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
javax.websocket.*
;
import
javax.websocket.server.PathParam
;
import
javax.websocket.server.ServerEndpoint
;
import
java.io.IOException
;
import
java.util.HashMap
;
@Component
@ServerEndpoint
(
"/ws/{token}"
)
public
class
WebSocketServer
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
WebSocketServer
.
class
);
/**
* 每个客户端一个token
*/
private
String
clientToken
=
""
;
private
static
final
HashMap
<
String
,
Session
>
sessionMap
=
new
HashMap
<>();
/**
* 连接成功
*/
@OnOpen
public
void
onOpen
(
Session
session
,
@PathParam
(
"token"
)
String
token
)
{
sessionMap
.
put
(
token
,
session
);
this
.
clientToken
=
token
;
LOG
.
info
(
"有新连接:token:{},session id:{},当前连接数:{}"
,
token
,
session
.
getId
(),
sessionMap
.
size
());
}
/**
* 连接关闭
*/
@OnClose
public
void
onClose
(
Session
session
)
{
sessionMap
.
remove
(
this
.
clientToken
);
LOG
.
info
(
"连接关闭,token:{},session id:{}!当前连接数:{}"
,
this
.
clientToken
,
session
.
getId
(),
sessionMap
.
size
());
}
/**
* 收到消息
*/
@OnMessage
public
void
onMessage
(
String
message
,
Session
session
)
{
LOG
.
info
(
"收到消息:{},内容:{}"
,
clientToken
,
message
);
}
/**
* 连接错误
*/
@OnError
public
void
onError
(
Session
session
,
Throwable
error
)
{
LOG
.
error
(
"发生错误"
,
error
);
}
/**
* 群发消息
*/
public
void
sendInfo
(
String
message
)
{
for
(
String
token
:
sessionMap
.
keySet
())
{
Session
session
=
sessionMap
.
get
(
token
);
try
{
session
.
getBasicRemote
().
sendText
(
message
);
}
catch
(
IOException
e
)
{
LOG
.
error
(
"推送消息失败:{},内容:{}"
,
token
,
message
);
}
LOG
.
info
(
"推送消息:{},内容:{}"
,
token
,
message
);
}
}
}
web/src/components/the-footer.vue
浏览文件 @
b67b6a28
...
...
@@ -6,14 +6,55 @@
</
template
>
<
script
lang=
"ts"
>
import
{
computed
,
defineComponent
}
from
"
vue
"
;
import
{
computed
,
defineComponent
,
onMounted
}
from
"
vue
"
;
import
store
from
"
@/store
"
;
import
{
Tool
}
from
"
@/util/tool
"
;
export
default
defineComponent
({
name
:
'
the-footer
'
,
setup
()
{
const
currUser
=
computed
(()
=>
store
.
state
.
localUser
);
let
websocket
:
any
;
let
token
:
any
;
const
onOpen
=
()
=>
{
console
.
log
(
'
WebSocket连接成功,状态码:
'
,
websocket
.
readyState
)
};
const
onMessage
=
(
event
:
any
)
=>
{
console
.
log
(
'
WebSocket收到消息:
'
,
event
.
data
);
};
const
onError
=
()
=>
{
console
.
log
(
'
WebSocket连接错误,状态码:
'
,
websocket
.
readyState
)
};
const
onClose
=
()
=>
{
console
.
log
(
'
WebSocket连接关闭,状态码:
'
,
websocket
.
readyState
)
};
const
initWebSocket
=
()
=>
{
// 连接成功
websocket
.
onopen
=
onOpen
;
// 收到消息的回调
websocket
.
onmessage
=
onMessage
;
// 连接错误
websocket
.
onerror
=
onError
;
// 连接关闭的回调
websocket
.
onclose
=
onClose
;
};
onMounted
(()
=>
{
// WebSocket
if
(
'
WebSocket
'
in
window
)
{
token
=
Tool
.
uuid
(
10
);
// 连接地址:ws://127.0.0.1:8880/ws/xxx
websocket
=
new
WebSocket
(
process
.
env
.
VUE_APP_WS_SERVER
+
'
/ws/
'
+
token
);
initWebSocket
()
// 关闭
// websocket.close();
}
else
{
alert
(
'
当前浏览器 不支持
'
)
}
});
return
{
currUser
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录