随笔分类 -  后端开发

摘要:select 的优点:大多数操作系统都支持 epoll 优点:内部的 epoll 空间是由红黑树构成,而 select 与 poll 都是线性表,发生事件时不需要遍历所有文件描述符,可以直接找到发生事件的集合 typedef union epoll_data { void *ptr; int fd; 阅读全文
posted @ 2023-03-28 16:41 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (十二)I/O复用 如果为了并发使用多进程服务器,代价很大。因为创建进程需要大量的运算和内存空间,并且相互之间的数据交换也要用管道这种相对复杂的方法 复用技术在服务器端的应用 12.2理解select并实现服务器端 select 可以将多个文件描述符集中到一起监视 要把 阅读全文
posted @ 2023-03-17 13:26 hzy0227 阅读(35) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (十一)进程间通信 进程间通信基本概念 因为两个进程间具有完全独立的内存空间,因此通信需要特殊的方式 通过管道实现进程间通信 管道并非进程的资源,与 socket 类似是操作系统的资源(也就不是 fork 的复制对象),两个进程通过操作系统提供的内存空间通信 #inclu 阅读全文
posted @ 2023-03-16 17:52 hzy0227 阅读(42) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (十)多进程服务器端 10.1进程概念及应用 为了提高客户端的平均满意度,通常会使用并发服务器的方法,并且网络程序中数据通信时间比 CPU 运算时间大,因此向多个客户端提供服务是一种有效利用 CPU 的方式 主要有三种方法: 多进程服务器:通过创建多个进程提供服务 多路复 阅读全文
posted @ 2023-03-16 17:51 hzy0227 阅读(41) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (九)套接字的多种可选项 之前写的程序都是创建好 socket 后未经特殊设置直接使用,但有时需要更改 getsockopt & setsocket 可以对上述的可选项进行读取和设置操作(有些只能进行一种操作) 读取和设置根据以下两个函数完成 #include <sys/ 阅读全文
posted @ 2023-03-15 19:54 hzy0227 阅读(39) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (八)域名及网络地址 8.2IP地址与域名之间的转换 由于网站的域名基本不会变更,而IP会频繁变动,因此程序员应利用域名编写程序,每次运行时程序根据域名获取IP,再接入服务器,这样程序就不会依赖于服务器的IP了,因此程序中也需要IP与域名转换的函数。 #include < 阅读全文
posted @ 2023-03-15 19:52 hzy0227 阅读(57) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (七)优雅地断开套接字连接 7.1基于TCP的半关闭 Linux 中的 close 与 Windows 中的 closesocket 函数都是完全断开连接。此时既无法发送也不能接受数据 更多情况下需要半关闭,可以传输不能接受,或可以接受不能传输 close 会同时断开这两 阅读全文
posted @ 2023-03-15 16:11 hzy0227 阅读(35) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (五)基于 TCP 的服务端/客户端(2) 5.1回声服务器的完美实现 由于上一章末尾提到的问题 write(sock, message, strlen(message)); str_len = read(sock, message, BUF_SIZE - 1); mes 阅读全文
posted @ 2023-03-14 17:26 hzy0227 阅读(41) 评论(0) 推荐(0) 编辑
摘要:TCP/IP网络编程 -- (四)基于 TCP 的服务端/客户端(1) 4.2实现基于 CP 的服务器端/客户端 等待连接请求阶段 #include <sys/socket.h> int listen(int sock, int backlog); 成功返回 0,失败返回 -1 sock :希望进入 阅读全文
posted @ 2023-03-14 17:25 hzy0227 阅读(102) 评论(0) 推荐(0) 编辑
摘要:目前在学习 gin 框架,但是在无图形化界面的 linux 云服务器上看不到网页的效果,而且 lynx 等纯文本浏览器过于丑陋了。于是研究了一下如何在本地计算机访问云服务器上的 127.0.0.1(感谢 new bing) 首先简单写了抄了个 go 语言编写的 http服务器,在 127.0.0.1 阅读全文
posted @ 2023-03-11 20:57 hzy0227 阅读(972) 评论(0) 推荐(0) 编辑
摘要:实现了客户端的菜单功能,分为 公聊模式 私聊模式 更新用户名 退出 并实现了这四个功能,本次的简易即时聊天系统到此结束 公聊模式 func (client *Client) PublicChat() { //发给服务器 for { var chatMsg string fmt.Println(">> 阅读全文
posted @ 2023-03-09 20:39 hzy0227 阅读(32) 评论(0) 推荐(0) 编辑
摘要:本次实现了客户端与服务器的连接,不过客户端仍是终端下的,不是UI(水平太低了) 并且实现命令行解析 ./client -ip 17.0.0.1 -port 8888 可把命令行中的参数传递进去 package main import ( "flag" "fmt" "net" ) type Clien 阅读全文
posted @ 2023-03-09 14:07 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:可以把用户的上线,下线,处理业务放到 user.go 中,但是好像会有传递依赖的问题,作为初学者就忽略了。。。 其余功能只需稍微添加代码,难度较低 package main import ( "net" "strings" ) type User struct { Name string Addr 阅读全文
posted @ 2023-03-09 13:36 hzy0227 阅读(40) 评论(0) 推荐(0) 编辑
摘要:在处理业务的 Handler(conn net.Conn) 方法中加入可以从当前 conn 中读取消息并广播的功能 go func() { buf := make([]byte, 4096) for { n, err := conn.Read(buf) if n == 0 { this.BroadC 阅读全文
posted @ 2023-03-07 14:33 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要:V0.1实现了server的基础构建,并在main.go中测试了连接成功 V0.2要实现用户上线功能,并且某用户上线时所有在线用户都会收到该用户的上线信息,即蓝线功能 实现用户上线功能,先定义一个用户结构体 type User struct { Name string Addr string C c 阅读全文
posted @ 2023-03-06 15:52 hzy0227 阅读(36) 评论(0) 推荐(0) 编辑
摘要:跟着b站上刘丹冰Aceld大佬开始做go项目 创建server结构体,要有server的Ip和Port两个变量 type Server struct { Ip string Port int } 创建一个server的接口 func NewServer(ip string, port int) *S 阅读全文
posted @ 2023-03-05 22:34 hzy0227 阅读(27) 评论(0) 推荐(0) 编辑
摘要:之前在win和mac上都配了一次,这次在linux配,属于是都练了一遍 安装go 下载linux版本安装包wget https://studygolang.com/dl/golang/go1.20.1.linux-amd64.tar.gz 解压安装包到 /usr/local/src(用户级的程序都可 阅读全文
posted @ 2023-03-04 15:50 hzy0227 阅读(82) 评论(0) 推荐(0) 编辑
摘要:刚学完go的语法,本来想着找个小项目试试手,发现大佬们都是vscode ssh到云服务器上做开发的。正好看到阿里云的学生认证后可以白嫖,就先嫖了个试试手 跟着各大教程简单配置了一下阿里云,安装vscode的Romote-ssh插件后配置信息如下: Host可以自己起,就是远程连接的服务器别名 Hos 阅读全文
posted @ 2023-03-03 21:28 hzy0227 阅读(144) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示