文档章节

Golang实现简单tcp服务器01 -- 概述

victoriest
 victoriest
发布于 2015/06/02 22:31
字数 591
阅读 337
收藏 1

概述

Golang作为一门近些年来非常风光的开发语言, 其实用范围很广, 图形界面, web框架, 图像引擎等等.
由于其语言特性简化了并发/多核的开发, 受到了很大的关注. 而使用它进行服务器开发, 也是非常高校而简洁的.
废话不多说, 本项目实践的目的是使用golang开发一个简单的基于tcp协议的服务器/客户端.

预备知识

首先, 我们需要了解一下golang下的如下包与特性:

goroutine

goroutine是一种轻量型的线程, 作为golang语言的语言特性, 可以很简单的在golang中进行多线程的开发. 利用go关键字, 我们能把任何一个方法/函数, 放在一个新的goroutine里执行.
实验01:

实验环境主文件夹里, 建立一个名为test.go的文本文档, 并开始编写以下代码

package main

import (
"fmt"
)

var quit chan bool = make(chan bool)

func main() {
go testGorountine()
<-quit
}

func testGorountine() {
for i := 0; i < 10; i++ {
fmt.Println("Hello world!")
}
quit <- true
}

然后, 打开xFce终端, 键入命令

go run test.go

我们就会看到终端的输出, 可以看到10行"hello world". 这里, 我们的hello world程序就是利用了gorountine创建了一个多线程/协程程序, 然后利用channel等待开启的协程处理完毕, 才结束主线程.

net包

在net包中, 提供了常用网络I/O操作的api, 包括我们的试验中需要用到的, Listen, Accept, Write, Read等方法. 具体参考链接:http://godoc.golangtc.com/pkg/net/

bufio包

bufio包则提供了一套有缓存的I/O读写操作的方法, 在我们的服务器与客户端进行数据通讯时, 会用到. 参考链接:http://godoc.golangtc.com/pkg/bufio/

然后, 还需要对长连接的TCP服务器与客户端通讯有个基本的认识:
client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。 关于这个概念, 网上有很多参考资料, 如果还不清楚, 随便google一下~

相关源码: https://git.oschina.net/victoriest/go-simple-tcp-server.git

© 著作权归作者所有

victoriest
粉丝 5
博文 4
码字总数 2673
作品 0
武汉
高级程序员
私信 提问
Node.js与Golang使用感受与小结【一】

Node.js与Golang使用感受与小结 目录 一、互联网的基石TCP/IP协议 二、HTTP服务器编写与编程语言无关 三、构建HTTP服务器需要掌握的知识点 四、HTTP协议基础 五、Node.js简介 六、是前端选择...

念念之间
2013/05/22
2.7K
8
Golang通过Thrift框架完美实现跨语言调用

  每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序。   做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯。采用http协议简单,但性能不高。采用...

qinerg
2013/09/29
27.7K
19
go实现的简易TCP的客户端和服务器

今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机去连接,简...

徐学良
2015/08/28
532
0
B站直播:使用Golang重构,流量最大的推送功能

1 悲剧直播推送功能 ****** 1.1 B站直播推送功能的困境 ***B站直播有个推送功能,就是这里,看到那个红色的数字没有,显示你关注的主播开播人数。 然后每个进入B站的用户,不管是不是直播的观...

anoty
2016/10/22
1K
1
Golang Web学习(13)—— 搭建简单的Web服务器

本文为转载,原文:Golang Web学习(13)—— 搭建简单的Web服务器 Golang 1、Web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要 浏览的内容。...

ChainZhang
2018/01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

移动开发中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台、Native、Hybrid……

移动开发领域近年来已经逐渐告别了野蛮生长的时期,进入了相对成熟的时代。而一直以来 Native 和 Web 的争论从未停止,通过开发者孜孜不倦的努力,Web 的效率和 Native 的体验也一直在寻求着...

编辑部的故事
24分钟前
12
0
MySQL8.0.17 - Multi-Valued Indexes 简述

本文主要简单介绍下8.0.17新引入的功能multi-valued index, 顾名思义,索引上对于同一个Primary key, 可以建立多个二级索引项,实际上已经对array类型的基础功能做了支持 (感觉官方未来一定...

阿里云官方博客
今天
11
0
make4.1降级 make-3.81、2错误

在编译 make-3.82 的时候出现如下错误提示 glob/glob.c:xxx: undefined reference to `__alloca'` 修改 /glob/glob.c // #if !defined __alloca && !defined __GNU_LIBRARY__ # ifdef __GNUC......

Domineering
今天
18
0
Rainbond集群的安装和运维的原理

本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。 1.Rainbond集群节点概述 1.1 节点分类 属性 类型 说明 manage 管...

好雨云帮
今天
11
0
好程序员大数据学习路线分享UDF函数

1.为什么需要UDF? 1)、因为内部函数没法满足需求。 2)、hive它本身就是一个灵活框架,允许用自定义模块功能,如可以自定义UDF、serde、输入输出等。 2.UDF是什么? UDF:user difine fun...

好程序员官方
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部