当前位置: 首页 > news >正文

做网站 营业执照网站跳出率一般多少

做网站 营业执照,网站跳出率一般多少,火星时代教育培训机构怎么样,html5代码大全这个是我在 CSDN 的第一百篇原则博文#xff0c;留念#x1f60e; #1 需求说明 先说下项目结构#xff0c;后端基于 Spring Boot 3#xff0c;前端为 node.js 开发的控制台程序。现在希望能够在前端模拟 tail 命令#xff0c;持续输出后端的日志文件。 #2 技术方案 #2.… 这个是我在 CSDN 的第一百篇原则博文留念 #1 需求说明 先说下项目结构后端基于 Spring Boot 3前端为 node.js 开发的控制台程序。现在希望能够在前端模拟 tail 命令持续输出后端的日志文件。 #2 技术方案 #2.1 基于轮询PASS 这个方案实施较为简单通过前端不断定时发起请求并携带已读的内容坐标position询问后端日志文件是否有更新判断依据为当前文件大小大于 position。若有变动则读取更新的内容回显在前端控制台。 此方案会产生非常多的请求如果定时间隔设置不好会有明显的延迟故不采用。 #2.2 WebSocket 长连接 前端开启一个 WebSocket后端监听到长连接后启动文件变动检测线程若文件发生变动则读取更新内容发送到前端 #3 实施 #3.1 后端改造 关于 Spring Boot 与 WebSocket 的集成请转到springboot集成websocket持久连接权限过滤拦截 首先我们定义一个监听文件变动并读取最新内容的工具类借助于 common-io 包 class FileTail(val path:Path, val handler: ConsumerString, delay:Long1000): FileAlterationListenerAdaptor() {private val watcher FileSystems.getDefault().newWatchService()private val MODE rprivate var reader RandomAccessFile(path.toFile(), MODE)private var position reader.length()// 使用 JDK 自带的 WatchService 发现不能正常读取文件追加的内容private var monitor: FileAlterationMonitor FileAlterationMonitor(delay)init {// 初始化监视器只检测同名的文件FileAlterationObserver(path.parent.toFile()) { f: File - f.name path.name }.also { observer-observer.addListener(this)monitor.addObserver(observer)monitor.start()}}override fun onFileChange(file: File) {reader.seek(position)val bytes mutableListOfByte()val tmp ByteArray(1024)var readSize: Intwhile ((reader.read(tmp).also { readSize it }) ! -1) {for (i in 0.. readSize){bytes.add(tmp[i])}}position bytes.sizehandler.accept(String(bytes.toByteArray()))}fun stop() {reader.close()monitor.stop()} }再定义长连接的通信处理类 Component class FileTailWsHandler : TextWebSocketHandler() {private val logger LoggerFactory.getLogger(javaClass)companion object {val monitors mutableMapOfString, FileTail()}override fun afterConnectionEstablished(session: WebSocketSession) {try{val textFile Paths.get(logs/spring.log)// 加入队列monitors[session.id] FileTail(textFile,{ text - session.sendMessage(TextMessage(text)) })}catch (e:Exception){logger.error(处理客户端消息失败, e)session.sendMessage(TextMessage(服务器出错${ExceptionUtils.getMessage(e)}))session.close(CloseStatus.SERVER_ERROR)}}override fun afterConnectionClosed(session: WebSocketSession, status: CloseStatus) {logger.info(客户端${session.id}${session.remoteAddress} 断开连接...)monitors.remove(session.id)?.stop()} }编写配置类启用上述的组件 Component class WsInterceptor : HandshakeInterceptor {private val logger LoggerFactory.getLogger(javaClass)override fun beforeHandshake(request: ServerHttpRequest,response: ServerHttpResponse,wsHandler: WebSocketHandler,attributes: MutableMapString, Any): Boolean {if(logger.isDebugEnabled){logger.debug(WS 握手开始${request.uri} 客户端${request.remoteAddress})request.headers.forEach { name, v - logger.debug([HEADER] $name $v) }}//此处可以进行鉴权//写入属性值方便在 handler 中获取attributes[F.PARAMS] request.headers.getFirst(F.PARAMS)?: EMPTY// 返回 true 才能建立连接return true}override fun afterHandshake(request: ServerHttpRequest,response: ServerHttpResponse,wsHandler: WebSocketHandler,exception: Exception?) {} }Configuration EnableWebSocket class SocketConfig : WebSocketConfigurer {private val logger LoggerFactory.getLogger(javaClass)Resourcelateinit var interceptor: WsInterceptorResourcelateinit var fileTailHandler:FileTailWsHandleroverride fun registerWebSocketHandlers(registry: WebSocketHandlerRegistry) {registry.addHandler(fileTailHandler, /ws/file-tail).addInterceptors(interceptor)} }#3.2 前端node.js 请先安装依赖npm i -D ws /*** 跟踪远程日志文件* param {*} ps*/ const _tailRemoteFile async ps{let url remoteUrl(/ws/file-tail)let index url.indexOf(://)let headers {}headers.params JSON.stringify(ps)const client new WebSocket(ws${url.substring(index)}, { headers })client.on(open, () console.debug(chalk.magenta(与服务器连接成功 )))// client.on(close,() console.debug(chalk.magenta(\n与服务器连接关闭 )))client.on(error, e {console.debug(chalk.red(e))})client.on(message, /** param {Buffer} buf */buf{let line buf.toString()if(line.endsWith(\n) || line.endsWith(\r\n))line line.substring(0, line.length-2)console.debug(line)}) }#3.3 看看效果
http://www.pierceye.com/news/321194/

相关文章:

  • seo网站优化案例高端品牌裙子
  • 合肥需要做网站的公司无锡工程建设信息网站
  • 网站服务器有哪几种做招聘网站没有数据
  • 合肥手机网站制作建设自己做视频的网站
  • 公司网站备案名称广东建设项目备案公示网站
  • 网站建设设计维片长治网站建设公司
  • 商务网站建设兴田德润电话多少世界著名网站开发语言
  • 湖北网站建设公司微信手机网站设计
  • 徐州网站制作需要多少钱网站规划设计方案
  • 设计师常用网站门户重庆注册公司流程和费用标准
  • 网站图片太多怎么优化全民推广
  • 湖南做网站 e磐石网络做网站网站盈利会怎么样
  • 网站关闭流程保定风泉网络科技有限公司
  • 学做网站视频工作室网站需要备案吗
  • 个人网站 后台管理咸阳网站建设xymokj
  • 安阳淘宝网站建设保障性租赁住房管理平台
  • 建设银行网站最近都打不开吗在线设计网名生成器
  • 淮滨网站建设公司建设银行有招投标网站吗
  • 岳阳做公司网站可以做司法考试题的网站
  • 深圳做网站联雅asp.net网站很快吗
  • 网站制作公司交接网站网站建设 上海浦东
  • 甘肃省住房和建设厅网站移动网站登录入口
  • 垦利区建设局网站如何零基础学编程
  • wordpress金融小学生班级优化大师
  • 网站链接怎么做标记在哪个网做免费网站好
  • 山西响应式网站建设制作营销网站建设公司排名
  • 商学院网站建设建议深圳市宝安网站建设
  • 营销型网站建设报价方案中国建设银行舟山分行网站
  • 建游戏网站建筑工程公司管理制度
  • 网站风格配置怎么做wordpress下载弹窗插件