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

高性能、解耦、异步的微博的消息队列

离开微博已久,总想着弄点东西出来纪念一下当年的峥嵘岁月:)。在微博,你不能不知道鸟哥 Laruence ,也不能不知道 mq 。 mq 是一个基于 memcached 协议,用 c/c++编写的消息队列中间件,有着高性能、解耦、异步化等特点。现在用 Go 重新实现了一遍,将早前自己用 mq 的过程中觉得有些特性可以加上的,都一一加上了,由于其依赖的东西极少,只是简单用了一个轻巧型的嵌入式数据库 BerkeleyDB ,就可以实现一个 simple 的队列服务 tcp server ,见https://github.com/YoungPioneers/mgq, 特性如下,希望大家给些意见,么么哒。 1、一写多读:举个例子, set myqueue message ,只要 get 的时候...阅读全文

Go语言实现定向聊天,最简单的.

代码不做注释了,因为我是把这个当作笔记来做的,如果感兴趣Go语言,加我QQ 我们一起学习这门新兴的语言. 服务端:Message_server.go package main import ( "container/list" "encoding/json" "fmt" Json "go-json" //go-simplejson "net" "sync" "time" ) type Client_message struct { sender int receiver int method string body string } type All_message struct { List *list.List Lock sync.Mutex } type Message struct ...阅读全文

博文 2016-03-08 13:00:01 fyxichen

阿里百川服务相关接口

https://github.com/smartwalle/taobao 由于项目需要用到阿里百川相关的服务,所以用 Golang 封装了一套阿里百川服务的 SDK,目前主要包括但不限于如下一些功能: * 及时通讯(IM):发消息(一对一、一对多)、添加用户、删除用户、更新用户信息等 * 消息推送:目前已完成所有接口的封装 * 短信发...阅读全文

千万级消息设计-思考(一)

说明 第一次写,也不知道写成什么样,喜欢的给个赞,不喜欢的给我留言。—— 蚂蚁爬树不怕高,有心学习不怕老。 场景 消息对于用户和平台来说,就是平台和用户之间的桥梁。特别是将消息看的很重的平台。 查询消息记录返回,响应时间问题? 现在都流行消息个数展示,未读消息个数问题?某某平台改变,小公司都要忙活了,忙坏了产品,累死了开发... 上面的两个看似简单的问题,在特定的场合,会给平台带来严重的结果,下面谈谈两种特殊的场合。 场合 1.用户到百万时,数据量到千万级后; 2.已经满足第一个条件后,平台再来几个推广活动。用户同时上线,参加活动会给用户发消息的时候(平台对用户进行推送消息,进行促销时,参加活动,活动奖励等使用消息通知的。 引发的问题 数据量过大时,查询速度变慢,导致数据库吃不消; 并发量高...阅读全文

博文 2018-06-10 10:34:37 antyiwei

分布式弹幕服务架构

今天简单记录一下弹幕服务器的设计思路,希望对大家有所帮助。 业务特点 弹幕典型的进少出多场景,一个房间如果有10W观众,每秒提交的弹幕也许只有1000次,但是广播弹幕给所有观众需要1000 * 10W次。 单机模型 为了推送消息,长连接几乎是必然的选择。 每个房间有若干观众,所有房间的观众都连接在1个服务进程上。 当弹幕提交上来,根据房间找出所有房间内的在线用户,循环将弹幕推送给他们。 假设1个服务进程的消息网络吞吐能力是50万次/秒,那么一个10万观众的房间,每秒提交5次弹幕就会达到服务端极限性能。 多机模型 假设一个直播间仍旧有10万人在线,希望解决每秒5次弹幕就达到性能瓶颈的问题,很容易想到能否横向扩展解决。 假设现在有2台服务器,10万人均匀连接在2台服务器上,也就是一台有5万人在线...阅读全文

博文 2017-11-22 02:30:07 鱼儿的博客

Go语言前端合并到GCC主干了,计划成为GCC4.6发布功能的一部分

Go编程语言是google开发的新型通用编程语言,主要面向当前和未来的的计算环境。 如果之前大家还在观望的话,现在可以不必担心TA的前景了。按说GCC已经很久没在主干上加入新语言了, 就连Pascal这样成熟的前端也没合并进去。 如果你够粉丝,就加油用实作项目来丰富Go的生态吧。 消息来源? 不知强内强外: http://groups.google.com/group/golang-nuts/browse_thread/thread/200979c143e959f...阅读全文

Go实现的微博消息队列

有兴趣看实现消息队列原理的,请移步 https://github.com/YoungPioneers/mgq,感谢您的宝贵意见 Introduction Memcached Go Queue, 简称mgq, 是一个用Go语言写的,基于memcached协议的消息队列。其父亲mcq是最早应用于weibo的基础消息中间件,有着高性能,解耦的优点,使得其广泛应用于微博 Features mgq是一个基于NOSQL数据库BerkeleyDB写的FIFO消息队列,目前支持的特性如下: 一写多读:举个例子,set myqueue 'one message',只要get的时候,myqueue开头,#分隔,如myqueue#1,多个客户端之间读是彼此独立的,是不受影响的 默认的get是读取队列中未读取的最旧...阅读全文

博文 2017-02-09 08:16:00 tabsu

轻量级、容错的消息流Liftbridge

Liftbridge 是一个为 [NATS](https://github.com/nats-io/gnatsd) 实现持久、复制的消息日志的服务器,通过为 NATS 消息传递系统实现持久的流扩充来提供轻量级、容错的消息流。客户端创建一个附加到 NATS 对象的流,然后,流将该对象上的消息记录到复制的预写日志中,多个消费者可以从同一个流中读回,并且可以将多个流附加到同一对象。 Liftbridge 在 NATS 前面提供类似 Kafka 发布-订阅的 API,高度可用且可水平扩展。 用于 NATS 的基于日志的 API 复制以容错 水平可扩展 通配符订阅支持 至少一次交付支持 消息键值支持 按键记录压缩 (WIP) 单个静态二进制 (~16MB) 设计为高吞吐量 非常...阅读全文

golang用TCP协议实现简单的聊天室

通常聊天室的架构分为服务器端和客户端: 服务器端:接受来自于客户端的连接请求并建立连接;所有客户端的连接会放进连接池中,用于广播消息; 客户端:连接服务器;向服务器发送消息;接收服务器的广播消息; 注意事项:某一个客户端断开连接后需要从连接池中摘除,并不再接收广播消息;某一个客户端断开连接后不能影响服务器端或别的客户端的连接; 详细的代码如下,文档看注释就好了,不再细说: 服务器: server.go package main import ( "net" "log" "fmt" ) func main() { port := "9090" Start(port) } // 启动服务器 func Start(port string) { host := ":" + port // 获取tcp...阅读全文

博文 2018-07-02 21:35:45 ustb80

有趣的defer

package main import "fmt" func main() { message := "消息1" defer func() { fmt.Println("第一个defer:", message) }() message = "消息改变了" defer func(m string) { fmt.Println("第二个defer:", m) message = "消息又改变了" }(message) message = "消息2" }有趣的defer,试着注释其中某些行,猜猜最终输出的是什么...阅读全文

博文 2019-02-12 13:50:31 UYAD

Golang下bind: address already in use

今天测试给服务端发消息,结果忘了把端口正常关闭,再次启动时候发现进程运行不了,出现提示说端口地址被占用了,这是由于上次忘了关闭,导致端口还在被使用,所以只能自己在终端查找并手动关闭,具体方法如下: 在终端输入lsof -i:8000,查找被使用的端口,其中8000是端口号,如下图所示 查找结果.jpeg COMMAND表示进程名,PID表示进程编号,输入kill 4707 (4707就是PID) 如果还被占用,就输入kill -9 4707强制结束进程...阅读全文

博文 2018-12-19 15:34:50 单抽律化娜

LollipopGo开源游戏服务器框架--网络基础模块源码

大家好,我是彬哥,本节给大家讲下LollipopGo游戏服务器NetBase.go,抛砖引玉了,主要是针对Go语言游戏服务器网络处理。 package main import ( "encoding/json" "fmt" "Proto" "Proto/Proto2" "code.google.com/p/go.net/websocket" ) func wwwGolangLtd(ws *websocket.Conn) { // fmt.Println("Golang语言社区 欢迎您!", ws) // data = json{} data := ws.Request().URL.Query().Get("data") fmt.Println("data:", data) NetDataCo...阅读全文

博文 2019-01-04 07:34:43 Golang语言社区

go-events package简介

go-events实现了一种处理event的机制,其核心概念是Sink(定义在event.go): // Event marks items that can be sent as events. type Event interface{} // Sink accepts and sends events. type Sink interface { // Write an event to the Sink. If no error is returned, the caller will // assume that all events have been committed to the sink. If an error is // received, the caller ma...阅读全文

博文 2017-06-25 14:10:32 肖楠

手绘raft算法

在现实的分布式系统中,不能可能保证集群中的每一台机器都是100%可用可靠的,集群中的任何机器都可能发生宕机、网络连接等问题导致集群中的某个节点不可用,这样,那个节点的数据就有可能和集群不一致,所以需要有一种机制,来保证在大多数机器都存在的情况下向外提供可靠的数据服务。这里的大多数节点指的是集群半数以上的节点。 raft算法就是一种在分布式系统中解决集群中多节点之间数据一致性的算法。Golang生态圈中大名鼎鼎的etcd就是使用的raft算法来保持数据一致性的,与raft类似的一致性算法还有Paxos算法、Zab协议等。 其实,raft算法维持数据一致性的核心思想很简单,就是:“少数服从多数”。 leader选举 保证数据一致性,最好的方式就是只有唯一的一个节点,唯一的这个节点读,唯一的这个节...阅读全文

附实例!实现iframe父窗体与子窗体的通信

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[前端林子](https://cloud.tencent.com/developer/user/2221081)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/5154?fromSource=waitui) 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息。同时本文会提供一个可运行的实例代码,实现在父窗体中,获取到来自子窗体的数据的效果。 # 0.背景介绍 (1)需要...阅读全文