Go语言中文网 为您找到相关结果 17

一个基于TCP/WebSockets的超级精简的长连接消息协议

背景 现在写客户端或者网页的时候, 越来越多的需要与长连接打交道, 尤其是在这个老板动不动就要搞一个聊天系统的时代, 后端大哥们于是分分钟就能造一个基于TCP或者WebSockets的消息协议出来. 但是问题在于每做一个新项目, 后端大哥们就能造出一个新协议, 而且能有各种神奇的限制. 比如说要在长连接当中保持一个状态机, 发送某条消息后收到的下一条消息一定是XXX, 或者完全一个JSON就直接丢了出来等等. 虽然都能用, 但是却需要在各种地方维护着不同的底层通信库, 没有章法可依, 所以草拟了这个协议. 简介 协议取名STMP, 意思是最简单的消息协议(The simplest message protocol). 项目托管在GitHub上, 包含了完整的协议文档以及相关实现, 详细了解请...阅读全文

博文 2017-07-29 03:08:17 一路行歌

聊聊 Cache

title: 聊聊 cache tags: cache categories: Tech comments: true date: 2018-06-18 22:00:00 去年的时候在做系统性能优化的工作中,花费了大量的精力为业务定制化缓存方案,当时感觉尽善尽美了,但前些天不经意再聊起缓存时发现在一些细节上还欠考虑。在这里总结一下做 cache 需要考虑的问题。 大纲如下: 缓存模式 缓存淘汰 缓存击穿 缓存穿透 缓存雪崩 缓存模式 比较常见的模式有分为两大类: Cache-aside 以及 Cache-as-SoR。其中 Cache-as-SoR(System of Record, 即直接存储数据的DB) 又包括 Read-through、Write-through、Write-behin...阅读全文

博文 2018-06-20 20:34:40 zhaif

WebSocket 双端实践(iOS/ Golang)

上一篇:《今天我们来聊一聊WebSocket》 主要介绍了WebSocket的原理、应用场景等等。 本篇将介绍WebSocket的双端实战(Client、Server)。 分为两部分: 1.Client:使用Starscream(swift)完成客户端长链需求。 2.Server:使用Golang完成服务端长链需求。 一、使用Starscream(swift)完成客户端长链需求 首先附上Starscream:GitHub地址 第一步:将Starsream导入到项目。 打开Podfile,加上: pod 'Starscream', '~> 4.0.0' 接着pod install。 第二步:实现WebSocket能力。 导入头文件,import Starscream 初始化WebSocket,...阅读全文

博文 2020-02-14 00:32:57 奇舞647

WebSocket 双端实践(iOS/ Golang)

本篇将介绍WebSocket的双端实战(Client、Server)。分为两部分:1.Client:使用Starscream(swift)完成客户端长链需求。2.Server:使用Golang完成服务端长链需求。一、使用Starscream(swift)完成客户端长链需求首先附上Starscream:GitHub地址第一步:将Starsream导入到项目。打开Podfile,加上:pod'Starscream','~> 4.0.0'复制代码接着pod install。第二步:实现WebSocket能力。导入头文件,import Starscream初始化WebSocket,把一些请求头包装一下(与服务端对好)privatefuncinitWebSocket(){// 包装请求头varrequ...阅读全文

博文 2020-02-14 00:32:56 废旧金属液压压块机

Kafka技术内幕: 生产者

概述消息系统通常都会由生产者,消费者,Broker三大部分组成,生产者会将消息写入到Broker,消费者会从Broker中读取出消息,不同的MQ实现的Broker实现会有所不同,不过Broker的本质都是要负责将消息落地到服务端的存储系统中。不管是生产者还是消费者对于Broker而言都是客户端,只不过一个是生产消息一个是消费消息。图2-1中生产者和消费者都是通过客户端请求的方式发送给服务端去执行存储消息或者获取消息的流程,在客户端和服务端这一层都有一个连接对象专门负责发送请求和接收请求,具体步骤如下:生产者客户端应用程序产生消息客户端连接对象将消息包装到请求中发送到服务端服务端的入口也有一个连接对象负责接收请求,并将消息以文件的形式存储起来服务端返回响应结果给生产者客户端消费者客户端应用程序...阅读全文

博文 2017-09-17 09:05:00 CatherinePlans

Bigfile 用新的方式管理文件,支持 HTTP,RPC 以及 FTP 协议

> github: https://github.com/bigfile/bigfile > > 中文文档:https://learnku.com/docs/bigfile > > 希望社区的朋友们喜欢,欢迎批评和指导 ### 基本介绍 `Bigfile` 是基于 [Golang]() 开发的一个文件传输管理系统,支持通过 `HTTP API`,`RPC` 调用以及 `FTP` 客户端管理文件。它构建于许多优秀的开源项目之上,基于数据库实现了一个虚拟的文件组织系统,在 `Bigfile` 中您可以看到熟悉的文件夹和文件,这种实现方式也是我们权限控制的基础。在底层,`Bigfile` 将任何文件切分成 `1 MB` 的文件块存储, 我们称之为...阅读全文

博文 2019-09-17 16:06:25 gamelife1314

leetcode 232 栈实现队列

232. 用栈实现队列 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 说明: 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。 你所使用的语言也许不支持栈。你可以使用 ...阅读全文

博文 2018-10-22 20:34:38 TomorrowWu

golang container包List和Ring

container/list  这个包包含了两个公开的程序实体:List和Element。前者实现了一个双向链表(以下简称链表),而后者则代表了链表中元素的结构。 //这是一个list中存储的元素 type Element struct { // Next and previous pointers in the doubly-linked list of elements. // To simplify the implementation, internally a list l is implemented // as a ring, such that &l.root is both the next element of the last // list element (l.Ba...阅读全文

博文 2018-09-27 00:34:39 one_zheng

Golang数据结构 - 3 - 队列

队列 在上一章中我们学习了栈以及栈的基本操作,并使用数组切片和链表来实现了两种不同的栈操作方式,接下来我们将学习并实现队列。 队列与栈非常相似,但是元素的出入原则与栈不同,在栈中元素是以后进先出(LIFO)的原则进行的,而在队列中元素以先进先出(FIFO)的原则进行。 队列与栈类似,是一种特殊的线性表,它只允许在表的前端进行插入操作,也只允许在表的后端进行弹出操作。进行插入操作的一端称为队尾,而进行删除操作的一端则称为队头。 本章将基于Go数组切片、链表来实现队列的基本操作,同时实现双端队列,最终探讨循环队列的特性以及应用。 队列定义 首先对队列定义如下基本操作接口: Enqueue(e ...Element):添加若干元素入队 Dequeue() Element:队首元素出队 Peek()...阅读全文

博文 2019-06-19 23:32:46 monigo

数据结构和算法(Golang实现)(15)常见数据结构-列表

列表 一、列表 List 我们又经常听到列表 List数据结构,其实这只是更宏观的统称,表示存放数据的队列。 列表List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序号的数据。先进先出的队列 (queue)和先进后出的栈(stack)都是列表。大家也经常听说一种叫线性表的数据结构,表示具有相同特性的数据元素的有限序列,实际上就是列表的同义词。 我们一般写算法进行数据计算,数据处理,都需要有个地方来存数据,我们可以使用封装好的数据结构List: 列表的实现有顺序表示或链式表示。 顺序表示:指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构。它以物理位置相邻来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。顺序表示的又叫顺序表,...阅读全文

博文 2020-04-07 16:32:34 陈星星

WebSocket 双端实践(iOS/ Golang)

级别:★★☆☆☆ 标签:「WebSocket」「Starscream」「Golang」 作者: 647 审校: 沐灵洛 上一篇:《今天我们来聊一聊WebSocket》 主要介绍了WebSocket的原理、应用场景等等。 本篇将介绍WebSocket的双端实战(Client、Server)。 分为两部分: 1.Client:使用Starscream(swift)完成客户端长链需求。 2.Server:使用Golang完成服务端长链需求。 一、使用Starscream(swift)完成客户端长链需求 首先附上Starscream:GitHub地址 第一步:将Starsream导入到项目。 打开Podfile,加上: pod 'Starscream', '~> 4.0.0' 复制代码接着pod i...阅读全文

博文 2020-02-13 17:34:21 QiShare

0862_和至少为K的最短子数组

0862_和至少为 K 的最短子数组 题目描述 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。 如果没有和至少为 K 的非空子数组,返回 -1 。 示例1: 输入:A = [1], K = 1 输出:1 示例2: 输入:A = [1,2], K = 4 输出:-1 示例3: 输入:A = [2,-1,2], K = 3 输出:3 Note: 1. 1 <= A.length <= 50000 2. -10 ^ 5 <= A[i] <= 10 ^ 5 3. 1 <= K <= 10 ^ 9 暴力算法 func shortestSubarray(A []int, K int) int { minLen := 50001 tail := len(A) - 1 for i := ...阅读全文

博文 2018-09-01 12:35:03 TomorrowWu

go语言数据结构和算法库GoSTL

GoSTL GoSTL是一个go语言数据结构和算法库,类似C++的STL,但功能更强大。结合go语言的特点,大部分数据结构都实现了线程安全,可以在创建对象的时候通过配置参数指定是否开启。 功能列表 数据结构 切片(slice) 数组(array) 向量(vector) 列表(list) 双端队列(deque) 队列(queue) 优先队列(priority_queue) 栈(stack) 红黑树(rbtree) 映射(map/multimap) 集合(set/multiset) 位映射(bitmap) 布隆过滤器(bloom_filter) 哈希映射树(hamt) 一致性哈希(ketama) 跳表(skiplist) 算法 快排(sort) 稳定排序(stable_sort) 二分查找(bi...阅读全文

博文 2019-11-05 15:33:22 stirling

LeetCode算法系列_0862_和至少为K的最短子数组

0862_和至少为 K 的最短子数组 题目描述 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。 如果没有和至少为 K 的非空子数组,返回 -1 。 示例1: 输入:A = [1], K = 1 输出:1 示例2: 输入:A = [1,2], K = 4 输出:-1 示例3: 输入:A = [2,-1,2], K = 3 输出:3 Note: 1. 1 <= A.length <= 50000 2. -10 ^ 5 <= A[i] <= 10 ^ 5 3. 1 <= K <= 10 ^ 9 暴力算法 func shortestSubarray(A []int, K int) int { minLen := 50001 tail := len(A) - 1 for i := ...阅读全文

博文 2018-09-01 11:35:03 tomorrowwu

golang双端链表list remove nil问题

我这个场景是做优先级的任务派发的,因为有几十个厂商,每个厂商还有不同的业务,每个业务也有10个优先级,这样算来整个任务缓冲池里最少又要几百个队列。 这里没用channel,因为channel通道太多,没法很好的做输出。 优先级肯定是有调度器主动去pop数据,这里选择了使用container/list提供的双端列表。 我的服务主要体现在Push, Pop 类似的操作上,container/list都可以O(1)的时间复杂度。 该文章后续会有更新, 原文地址, http://xiaorui.cc/?p=4809 话题说 list 有个 remove的问题… 你遍历整个链表会发现只会删除第一个,当再次迭代的时候,e.Next() == nil 空值,跳出循环。。。 for e := l.Front...阅读全文

博文 2019-06-03 19:55:02 rfyiamcool

深度解密Go语言之sync.pool

最近在工作中碰到了 GC 的问题:项目中大量重复地创建许多对象,造成 GC 的工作量巨大,CPU 频繁掉底。准备使用 sync.Pool 来缓存对象,减轻 GC 的消耗。为了用起来更顺畅,我特地研究了一番,形成此文。本文从使用到源码解析,循序渐进,一一道来。 本文基于 Go 1.14 是什么sync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的名字。 有什么用对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool...阅读全文

博文 2020-05-02 18:57:56 qcrao

WebSocket双端实践(iOS/ Golang)

一、使用Starscream(swift)完成客户端长链需求首先附上Starscream:GitHub地址第一步:将Starsream导入到项目。打开Podfile,加上:pod'Starscream','~> 4.0.0'复制代码接着pod install。第二步:实现WebSocket能力。导入头文件,import Starscream初始化WebSocket,把一些请求头包装一下(与服务端对好)privatefuncinitWebSocket(){// 包装请求头varrequest =URLRequest(url:URL(string:"ws://127.0.0.1:8000/chat")!) request.timeoutInterval =5// Sets the timeout...阅读全文

博文 2020-02-14 00:32:55 秸秆青储液压打包机