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

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

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

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

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 废旧金属液压压块机

聊聊 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

Kafka技术内幕: 生产者

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

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

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

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

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

Golang数据结构 - 3 - 队列

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

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

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

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

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

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

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 秸秆青储液压打包机

GoSTL-强大的go语言数据结构和算法库

# GoSTL GoSTL是一个go语言数据结构和算法库,类似C++的STL,但功能更强大。结合go语言的特点,大部分数据结构都实现了线程安全,可以在创建对象的时候通过配置参数指定是否开启。 ## 功能列表 - 数据结构 - [切片(slice)](#slice) - [数组(array)](#array) - [向量(vector)](#vector) - [列表(list)](#list) - [双端队列(deque)](#deque) - [队列(queue)](#queue) - [优先队列(priority_queue)](#priority_queue) - [栈(stack)](#st...阅读全文