一个基于json的快速建立websocket解决方案,支持node、web,可以自定义middleware
【一个基于json的快速建立websocket解决方案,支持node、web,可以自定义middleware】前端快速建立和node建立websocket,使用json格式,支持中间件。示例如下,前后端快速传递服务器时间戳。结合redux几行代码即可将数据传递到react组件。
github: https://github.com/stillyuk/j...
server
let websocketServer = new JsonWebsocketServer(8899)
websocketServer.start()
websocketServer.addTask(new ServerTimestampTask(websocketServer))
websocketServer.use(middleware.ip)
websocketServer.use(middleware.version)
websocketServer.use(async (connInfo, clientData, next) => {
if (clientData.token !== 'abc') {
websocketServer.sendClient([connInfo], 'error', {errorCode: 1, errorMsg: 'login first'})
} else {
await next()
}
})
client
import JsonWebsocketClient from '../src/JsonWebsocketClient.js'let client = new JsonWebsocketClient('ws:localhost:8899')client.addWatch('serverTimestamp', null, (a) => {
console.log(a)
})
client.addWatch('version', '1.0')
client.addWatch('error', null, (data) => {
console.log(data)
})
redux middleware and reducer
//middleware
const webSocketClient = new JsonWebsocketClient()export function wsUpdateType(type) {
return type + '_ws_update'
}export default () => next => async (action: any) => {
if (!action.wsType) {
return next(action)
}
if (action.wsType == 'close') {
webSocketClient.close(action.data)
return
}
webSocketClient.addWatch(action.wsType, action.data, (data) => {
return next({
type: wsUpdateType(action.type),
data: data
})
})
}//reducer
function socket(type, value) {
return (state = value, action) => {
if (action.type == wsUpdateType(type)) {
return action.data
}
return state
}
}
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 一个人的碎碎念
- 七年之痒之后
- 我从来不做坏事
- 异地恋中,逐渐适应一个人到底意味着什么()
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 迷失的世界(二十七)
- live|live to inspire 一个普通上班族的流水账0723
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾